MongoDB Shell中文档的CUD
写在前面的话
- 我学习的时候,使用的是《MongoDB权威指南》这本书,在学习过程中发现,有些命令没有起到预期的效果,所以如果你也遇到这种问题,不必惊慌!
- 其实MongoDB的CRUD命令可以很复杂,但是一般用的不多,所以如果没有太多精力,懂常用的即可。
- 文中的
foo
是我自己建的测试集合的名称。 - 每种命令,注释下的第一行表示语法,其后的表示示例。
- MongoDB的查询很复杂,我打算单独写一篇,有需要的可以到我的该
MongoDB专栏
下找,如果没有,就代表还没写,吼吼吼!
新增文档命令
//普通新增
db.foo.insert(<document>);
db.foo.insert({"bar":"baz"});
//批量新增(这个命令我电脑上就不行)
db.foo.batchInsert(<document_array>);
db.foo.batchInsert([{"first":"1"},{"second":"2"},{"third":"3"}]);
删除文档命令
//删除集合中所有的文档,但是不删除集合和集合元数据
db.foo.remove();
//删除整个集合
db.foo.drop();
//删除符合条件的文档
db.foo.remove(<condition>)
db.foo.remove({"name":"jk"});
更新文档命令
注意:更新时,是更新全部符合条件的数据还是更新第一个符合条件的数据,是通过更新语句中的第四个参数true/false来控制的,不同版本可能不一样
//文档替换,直接使用新文档替换符合条件的旧文档
db.foo.update(<condition>,<new_document>);
db.foo.update({"bar":"baz"},{"name":"json"});
//数值属性的加减
db.foo.update(<condition>,{"$inc":{"<数值属性>":<增加值>}}) //负数表示减少
db.foo.update({"url":"www.baidu.com"},{"$inc":{"count":1}})
db.foo.update({"url":"www.baidu.com"},{"$inc":{"count":-1}})
//属性设置(只是更改属性,而不是替换整个文档)
db.foo.update(<condition>,{"$set":{"<属性>":<属性值>}})
db.foo.update({"name":"jk"},{"$set":{"book":"war and peace"}})
db.foo.update({"name":"jk"},{"$set":{"location.province":"SU"}})
//属性移除(删除指定属性)
db.foo.update(<condition>,{"$unset":{"<属性>":1}})
db.foo.update({"name":"jk"},{"$unset":{"book":1}})
//向数组属性里增加元素
db.foo.update(<condition>,{"$push":{"<数组名>":<数组元素>}})
db.foo.update({"name":"jk"},{"$push":{"books":"war and peace"}})
//向数组属性里增加多个元素
db.foo.update(<condition>,{"$push":{"<数组名>":{"$each":<元素数组>}}})
db.foo.update({"name":"jk"},{"$push":{"books":{"$each":["oh my god","oh,My dear son"]}}})
//向数组属性中增加多个属性,并且只保留数组中最后添加的n个元素
db.foo.update(<condition>,{"$push":{"<属性名>":{"$each":<元素数组>,"$slice":-n}}})
db.foo.update({"name":"jk"},{"$push":{"books":{"$each":["oh my god","oh,My dear son"],"$slice":-5}}})
//向数组属性中添加多个元素,且只保留数组中按某个属性进行排序之后的后n个元素
db.foo.update(<condition>,{"$push":{"<数组名>":{"$each":<元素数组>,"$slice":-n,"$sort":<排序条件>}}})
db.foo.update({"name":"jk"},{"$push":{"books":{"$each":["oh my god","oh,My dear son"],"$slice":-5,"$sort":-1}}})
db.foo.update({"name":"jk"},{"$push":{"books":{"$each":["oh my god","oh,My dear son"],"$slice":-5,"$sort":{"age":1}}}})
// 当数组中没有的时候才新增(把数组当集合,不允许重复)
db.foo.update("<数组名>":{"$ne":<元素>},{"$push":{"<数组名>":<元素>}})
db.foo.update({"books":{"$ne":"oh my god1"}},{"$push":{"books":"oh my god1"}})//这个命令我这用不了
//向数组中不重复地添加元素
db.foo.update(<condition>,{"$addToSet":{"<数组名>":<元素>}})
db.foo.update({"name":"jk"},{"$addToSet":{"books":"oh my god1"}});
//向数组中不重复地添加多个元素
db.foo.update(<condition>,{"$addToSet":{"<数组名>":{"$each":<元素数组>}}})
db.foo.update({"name":"jk"},{"$addToSet":{"books":{"$each":["XXX","xxx"]}}})
//从数组中移除最后一个或者第一个元素
db.foo.update(<condition>,{"$pop":{"<数组名>":1或者-1}})
db.foo.update({"name":"jk"},{"$pop":{"books":1}})
db.foo.update({"name":"jk"},{"$pop":{"books":-1}})
//从数组中移除指定元素
db.foo.update(<condition>,{"$pull":{"<数组名>":<元素>}})
db.foo.update({"name":"jk"},{"$pull":{"books":"oh my god"}})
//修改数组中指定下标的元素
db.foo.update(<condition>,{"$set":{"<数组名>.<下标>":<新的元素>}})
db.foo.update({"name":"jk"},{"$set":{"books.0":"125626"}})
//特殊的,不推荐用,主要是因为比较难理解,有兴趣的可以研究
db.foo.update({"books":"XXX"},{"$set":{"books.$":"yyy"}}) //根据条件语句匹配的结果来设置数组元素
//第三个参数表示如果不存在,就新增一个符合条件语句的文档来执行
//如果存在符合条件的就修改,如果没有就新增(结果新增了以恶搞年龄为27的文档,执行后年龄变成了31)
db.foo.update({"age":27},{"$inc":{"age":4}},true)
// 设置一个在新增时初始化的属性,以后就不能更改(但是我的机器上没作用)
db.foo.update({},{"$setOnInsert":{"createAt":new Date()}},true)
//如果存在就修改,没有就新增文档
db.foo.save(<document>)
db.foo.save({"name":"jk"});
版权声明:本文为qq_43222869原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。