插入文档
db.collection.insertOne() 用于向集合插入一个新文档,如下:
db.movies.insertOne({"title" : "Stand by Me"})
db.collection.insertMany() 用于向集合插入一个多个文档,如下:
db.movies.insertMany( [ {"_id": 3, "title": "Sixteen Candles"}, {"_id": 4, "title": "The Terminator"} ], {"ordered": false})
ordered:指定是否按顺序写入,默认 true,按顺序写入。
虽然 insert 等方法仍然支持向后兼容,但今后不应该在应用程序中继续使用。应该使用 insertOne 和insertMany 来创建文档。
删除文档
deleteOne 和deleteMany 两种方法。这两种方法都将筛选文档(filter document)作为第一个参数。
db.movies.deleteOne({"_id": 4}) db.movies.deleteMany({"year": 1984})
数据删除是永久性的。没有任何方法可以撤回删除文档或者删除集合的操作,也无法恢复被删除的文档,当然从以前的备份中恢复除外。
更新文档
updateOne、updateMany 和 replaceOne。
updateOne 和 updateMany都将筛选文档作为第一个参数,将变更文档作为第二个参数,后者对要进行的更改进行描述。
replaceOne 同样将筛选文档作为第一个参数,但第二个参数是一个用来替换所匹配的筛选文档的新文档。
更新文档是原子操作:如果两个更新同时发生,那么首先到达服务器的更新会先被执行,然后再执行下一个更新。
db.movies.replaceOne( {"_id": 1} , {"_id": 1, "title": "mongo111"} );
更新运算符
"$set" 用来设置一个字段的值。如果这个字段不存在,则创建该字段。
db.movies.updateOne({"_id": 1}, {"$set": {"a1.a11": "a11"}})
可以用 "$unset" 将这个键完全删除
db.movies.updateOne({"_id": 1}, {"$unset": {"a1": ""}})
数组运算符
如果数组已存在,"$push" 就会将元素添加到数组末尾;如果数组不存在,则会创建一个新的数组。
db.movies.updateOne({"_id": 1}, {"$push": {"b1": "b1"}})
"$push" 使用 "$each" 修饰符,在一次操作中添加多个值:
db.movies.updateOne({"_id": 1}, {"$push": {"b1": {"$each": [562.776, 562.790, 559.123]}}})
可以使用 "$slice" 修饰符配合 $push 来防止数组的增长超过某个大小
db.movies.updateOne({"_id": 1}, { "$push": { "b1": { "$each": ["111", "222"], "$slice": -1 } } })
在截断之前可以将 "$sort" 修饰符应用于 "$push" 操作
db.movies.updateOne({"_id": 1}, { "$push": { "b2": { "$each": [ {"name": "aaa", "rating": 6.6}, {"name": "bbb", "rating": 4.3}], "$slice": -2, "$sort": {"rating": 1} } } })
参考: MongoDB权威指南(第3版)第 3 章 创建、更新和删除文档