惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
美团技术团队
Last Week in AI
Last Week in AI
WordPress大学
WordPress大学
博客园 - 三生石上(FineUI控件)
博客园 - 聂微东
雷峰网
雷峰网
阮一峰的网络日志
阮一峰的网络日志
博客园 - 叶小钗
IT之家
IT之家
Google DeepMind News
Google DeepMind News
D
Docker
J
Java Code Geeks
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 【当耐特】
V
V2EX
Hugging Face - Blog
Hugging Face - Blog
博客园 - Franky
月光博客
月光博客
宝玉的分享
宝玉的分享
酷 壳 – CoolShell
酷 壳 – CoolShell
aimingoo的专栏
aimingoo的专栏
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

风萧古道 - 勤学苦练,年复一年

AI 编程时代,想象力成了最被奖励的能力 游戏服务器开发经验(五)应对复杂需求 沉浸式体验东汉末年生活 - 《真三国无双 起源》玩后感 怒其不争!致2025年HLTV的Top18-NiKo Linux家用服务器维护指南 游戏服务器开发经验(四)避免写Bug的习惯、技巧和心态 游戏服务器开发经验(三)线上维护 游戏服务器开发经验(二)避免内存泄露 游戏服务器开发经验(一)道具防刷 35岁找不到工作,绝对不会是软件开发人员的结局 用爱发电项目开发两个月的心得体会 以魏延“子午谷奇谋”讨论软件需求可行性问题 MQTT协议中可变长度的具体计算方式(有计算过程解析) 关于游戏服务器配置表功能的探讨 Java并发编程中上锁的几种方式 如何用C++分割一个字符串? CSAPP第二章-信息的表示与处理 我的自我介绍 Windows XP虚拟机中文版无需激活下载 Java TreeSet的一些用法和特性 Linux C++ Socket实战 传统软件服务器与游戏服务器架构区别 独立个人项目开发心得 - 任务切分、挑战性、实用性和半途而废 使用Python实现简单UDP Ping 使用Python开发一个简单的web服务器 Kotlin手动实现一个最简单的哈希表 Kotlin实现二叉堆、大顶堆、优先级队列 搭建Spark实战环境(3台linux虚拟机集群)(一)样板机的搭建 Springboot操作MongoDB,包括增改查及复杂操作 Unison在Linux下的安装与使用
MongoDB常用查询语句
JonathanLin · 2020-02-09 · via 风萧古道 - 勤学苦练,年复一年

增删改查部分

MongoDB单条件查询

db.xxx.find({'city.value':'深圳市'})

文档部分json结构为:

{
    ...
    "city": {
        "chinese": "城市",
        "value": "深圳市"
    }
 
}

使用key.key的形式,得到对应的value。

MongoDB与查询

db.xxx.find({$and:[{'city.value':'深圳市'},{'status': 'finished'}]})

MongoDB的Group By和Having

db.xxx.aggregate(
    {
        $match: {
            'city.value':'马鞍山市'
        }
    },
    {
        $group : {
            _id : "$service",
            num_tutorial : {
                $sum : 1
            }
        }
    },
    {
        $match:{
            num_tutorial:{
                $gt:1
            }
        }
    }
)

$group指定对哪个属性分组,用num_tutorial来判断数量是否满足某个条件。 $gt:greater than

删除文档

db.xxx.remove({'city.value':'伊犁哈萨克自治州'})

删除重复数据

删除某个属性重复的数据,只保留第一条

db.xxx.aggregate(
    {
        $match:{
            'city.value':xxx
        }
    },
    {
        $group : {
            _id : "$service", 
            num_tutorial : {
                $sum : 1
            },
            dups:{
                $addToSet:'$_id'
            }
        }
    },
    {
        $match:{
            num_tutorial:{
                $gt:1
            }
        }
    }).forEach(doc2=>{
        doc2.dups.shift();
        db.bszn.remove({_id:{$in:doc2.dups}});
    })

为选中的文档增加属性 为“status”属性赋值为“finished”。

db.xxx.update({}, {$set:{'status':'finished'}},{multi: true})

为选中的文档删除属性 删除“status”属性。

db.xxx.update({}, {$unset:{'status':''}},{multi: true})

根据ObjectId查询

db.xxx.find({'_id': new ObjectId('5d7368fb5a32cfe8d8651781')})

向数组中插入值或对象

db.xxx.update({'_id': new ObjectId('5d7368fb5a32cfe8d8651781')},
{$push:{'某个字段''要插入的值'}})

Mongo导入导出

Mongo导出 – mongodump

mongodump -h 192.168.xx.xxx:xxxxx -u xxxx -p xxx -d xxxxx -c xxx -o W:\xxxxx\dump\someDirectory
  • -h 服务器ip:端口号
  • -u 用户名
  • -p 密码
  • -d 选择的数据库
  • -c 选择的集合(如果没有-c,则将所有集合导出备份)
  • -o 选择导出的目录

注意,如果出现

Failed: error writing data for collection `bigdata_znkf_crawl.fgcx` to disk: error reading collection: 
Failed to parse: { find: "fgcx", skip: 0, snapshot: true, 
$readPreference: { mode: "secondaryPreferred" }, 
$db: "bigdata_znkf_crawl" }. Unrecognized field 'snapshot'.

则在后面加上:

--forceTableScan

Mongo导入 – mongorestore

mongorestore -h 192.168.xx.xxx:xxxxx -u xxx -p xxxx -d xx  -c xxx 
W:\xxxxxx.bson

Mongo数组查询

字符串数组

来源:https://www.jianshu.com/p/cf983a28c2da

使用$all操作: 最后那个文件前面不用 横杠+字母,直接选择一个.bson文件即可导入了。

db.fruitshop.find({"fruits":{"$all":["apple","banana"]}});

对象数组

来源:https://www.jb51.net/article/126911.htm

使用$elemMatch操作:

{ "qList": { $elemMatch: { "qid": 1, "reorderFlag": 0} } }

Mongo树查询(存在parent_id进行连接)

db.crawler_classify.aggregate([
    {$match: {'classify_id' : '94ebb480247d42dcb5c99a2ef19550ab'}},
    {$graphLookup : {from: 'crawler_classify', startWith: "$classify_id" , connectFromField: "classify_id", connectToField: "parent_id", as :"son"}}
    ])

Mongo插入语句

db.crawler_classify.insert({
    'xxxx': 'yyyy',
    'zzzz': 'aaa',
    ...
})