Mongo 基础命令

插入

db.collection.insert({"name": "iFan"})
# 批量插入
db.collection.insertMany([
    {"name": "iFan2"}, {"name": "iFan1"}
])

mongodb能接受的最大消息长度为48M,如果当前的数据长度超过了48M,多数驱动程序会将该批量插入拆分为多个48M的请求。

如果在批量插入时,一个文档插入失败,则之前的文档是会插入成功的,但是之后的文档不会在进行插入了,可以使用continueOnError忽略错误。

删除

db.collection.drop() // 删除所有文档
db.collection.remove()
db.collection.deleteOne() 
db.collection.deleteMany() 

更新

db.collection.updateOne({查询条件}, {需要更新的数据}) // 仅更新一条数据
db.collection.updateMany({查询条件}, {需要更新的数据}) // 更新多条数据
db.collection.update({查询条件}, {需要替换的数据}) // 对于符合条件的文档,整个替换 更新多条
db.collection.update({查询条件}, {"$set": {需要更新的字段}}) // 对于符合条件的文档,原始文档中字段存在的则更新,不存在则添加
db.collection.update({查询条件}, {"$unset": {需要删除的字段}}) // 删除字段
db.collection.update({查询条件}, {"$inc": {"cnt": 1}}) // 对cnt字段进行+1, 如果不存在则创建
db.collection.update({查询条件}, {"$push": {"key": "value"}}) // 对key数组进行添加
db.collection.update({查询条件}, {"$push": {"key": {"$ne": "value"}}}) // 如果key数组中不存在value,则添加
db.collection.update({查询条件}, {"$push": {"key": {"$each": [元素1, 元素2], "$slice": -10}}}) // $each 可以一次性添加多个元素,$slice只保留最后添加的10个元素。
db.collection.update({查询条件}, {"$addToSet": {"key": "value"}}) // 保证添加的数据不会重复
db.collection.update({查询条件}, {"$pop": {"key": -1}}) // 从头部删除
db.collection.update({查询条件}, {"$pull": {"key": "条件"}}) // 根据条件删除
db.collection.update({查询条件}, {修改信息}, true) // 没有找到符合条件的文档,则将条件和更新文档为基础创建一个新文档
db.collection.updateMany()

当执行更新操作增加的文档大小超过了该文档分配的空间,更新操作会在磁盘上重定位该文档。

Mongodb不得不移动一个文档时,它会修改集合中的填充因子,填充因子是Mongodb为每个新文档预留的增长空间,使用db.coll.stats()查询。

查询

db.collection.findOne({}) // 查询单个数据
db.collection.find({查询条件}, {需要显示的字段})
db.collection.find({"name": {"$in": ['a', 'b']}}) // 一个键对应多个值
db.collection.find({"name": {"$nin": ['a', 'b']}}) // 不存在
db.collection.find({"$or": [{"name": "a"}, {"age": 18}]}) // OR
db.collection.find({"name": {"friend": null, "$exists": true}}) // 判断 name的friend是否存在并且是否为null
db.collection.find().count()
db.collection.count() // 查询集合的长度
db.collection.find({"age": {"$lt": 10}})   // age < 10
db.collection.find({"age": {"$lte": 10}})  // age <= 10
db.collection.find({"age": {"$gt": 10}})   // age > 10
db.collection.find({"age": {"$gte": 10}})  // age >= 10
db.collection.find({"age": {"$ne": 10}})   // age != 10

查询数组

db.collection.insert({"friend": ["a", "b", "c"]}) // 插入数组
db.collection.find({"friend": "a"}) // 存在a
db.collection.find({"friend": ["a", "b"]}) // 精确匹配。顺序,内容全部一致。
db.collection.find({"friend": {"$all": ["a", "b"]}}) // 既有a,也有b
db.collection.find({"friend": {"$size": 3}}) // 指定长度的数组。
db.collection.find({}, {"firend": {"$slice": -10}}) // 返回后10个
db.collection.find({}, {"firend": {"$slice": [10, 20]}}) // 返回第10到第20个,除非特别声明,否则使用 $slice 时将返回文档中的所有键。
db.collection.find({}, {"friend.$": 1}) // 返回朋友中的第1个人

查询内嵌文档

db.collection.find({"name.first": "i", "name.last": "Fan"}) // 查询内嵌文档。
db.collection.find({"name": {"$elemMatch": {"first": "i", "last": "Fan"}}}) // 在查询条件中部分指定匹配数组中的单个内嵌文档。

使用正则查询

db.collection.find({"name": /iFan/i}) // 使用正则表达式判断
// Mongodb使用Perl兼容的正则表达式库来匹配正则表达式
// mongodb可以为前缀表型正则表达式创建索引 `/^iFan/`,所以这类搜索会比较高效。

where查询

db.foo.find({"$where" : function () {
    for (var current in this) {
        for (var other in this) {
            if (current != other &amp;&amp; this[current] == this[other]) {
                return true;
            }
        }
    }
    return false;
}})

分页和排序

db.collection.find().limit(number) // 限制显示条数
db.collection.find().limit(number).skip(number) //跳过文档
db.collection.find().sort({key:1, key2: 0}) // 根据key1升序,key2降序
posted @ 2020-05-07 23:19  呓语i  阅读(123)  评论(0编辑  收藏  举报