MongoDB创建、更新和删除等指令
2018-01-08 15:56
288 查看
首先推荐一个很好用的MongoDB客户端:RoboMongo
可以去官网上下载:https://robomongo.org/download
MongoDB的一些基础语法:
创建collection集合,如创建 mycollection
另外,这里可以不创建集合,直接插入文档,集合将会自动创建,如:
如果一次性多条插入,效率较高,可以使用 insertMany 方法:
对于插入,insert 方法已不提倡使用,3.2版本以后的Mongo,类似 insertOne/insertMany , updateOne/updateMany , deleteOne/deleteMany , findOneAndDelete/findOneAndUpdate/findOneAndReplace 都最好使用这些方法。
根据条件删除单条:
根据条件删除多条:
$unset 修改器后,字段的值赋值多少是无所谓的,最终都要删掉该key。
另外,如果需要增加值的键不存在时,将创建这个键,并将其值设置为增加量。
如果数组已经存在,$push 会向已有数组末位添加一个元素,如果没有就创建一个新的数组。
例如对下边文档,content键数组后添加两个元素:
上边的也可以用 $each 来更简单的改写:
$each 可以通过一次操作将一些新元素添加到数组。
另外还可以与 slice 及 sort 操作符搭配使用,
如 slice:-10
slice 会保证数组添加只保留不大于10的元素个数,如果元素个数大于10,只有最后的10个保留,可以以此构建队列。
sort 可以将数组中的对象进行排序,然后保留个数。
二者都必须和push配合使用,且必须使用each。
“$addToSet”保证元素不重复
类似$push 的用法,可以和 each 一起使用。
删除元素
几个从数组中删除元素的方法。$pop 可以从头或尾删除元素。
另外可以使用 $pull 来删除元素
基于位置的数组修改
很多情况下,不预先查询就不知道修改的数组的下标,可使用定位操作符 $ ,用来定位查询文档已经匹配的数组元素并进行更新。
update的两个参数
update({}, {$set:{}}, false, true)
参数有两个boolean参数,第一个false代表,如果没有查询到匹配条件的文档,不需要进行对应的插入,即如果为true,无则插入。第二个true代表,更新匹配条件的所有文档,如果为false,则只更新第一条记录。
可以去官网上下载:https://robomongo.org/download
MongoDB的一些基础语法:
创建库和集合
创建数据库testdb,直接使用选库命令,不存在则会新建:> use testdb switched to db newdb
创建collection集合,如创建 mycollection
> db.createCollection("mycollection")
另外,这里可以不创建集合,直接插入文档,集合将会自动创建,如:
> db.mycollection.insertOne({"name":"foobar"})
单条插入和批量插入
> db.mycollection.insertOne({"name":"foobar"}) { "acknowledged" : true, "insertedId" : ObjectId("5a52e3e287df659d59e547e5") }
如果一次性多条插入,效率较高,可以使用 insertMany 方法:
> db.mycollection.insertMany([{"name":"foo1"},{"name":"foo2"},{"name":"foo3"}]) { "acknowledged" : true, "insertedIds" : [ ObjectId("5a52efc087df659d59e547e6"), ObjectId("5a52efc087df659d59e547e7"), ObjectId("5a52efc087df659d59e547e8") ] }
对于插入,insert 方法已不提倡使用,3.2版本以后的Mongo,类似 insertOne/insertMany , updateOne/updateMany , deleteOne/deleteMany , findOneAndDelete/findOneAndUpdate/findOneAndReplace 都最好使用这些方法。
删除
remove() 和 deleteMany() 不带查询条件时,均为删除集合所有文档,应注意数据安全。> db.mycollection.remove({"status":"A"})
根据条件删除单条:
> db.mycollection.deleteOne({"name":"foo1"}) { "acknowledged" : true, "deletedCount" : 1.0 }
根据条件删除多条:
> db.mycollection.deleteMany({"status":"A"}) > db.mycollection.remove({"status":"A"})
更新
使用修改器“$set”修改器
可以用来指定一个字段的值。如果字段不存在,则创建。> db.mycollection.updateOne({"name":"foo"},{$set:{"age":18}}) { "acknowledged" : true, "matchedCount" : 1.0, "modifiedCount" : 1.0 }
“$unset”修改器
> db.mycollection.updateOne({"name":"foo"},{$unset:{"age":1}}) { "acknowledged" : true, "matchedCount" : 1.0, "modifiedCount" : 1.0 }
$unset 修改器后,字段的值赋值多少是无所谓的,最终都要删掉该key。
“$inc”修改器
$inc 修改器可以用来给数值字段增加或减少一定的值,要增加的键值必须为数字,即只能是整形,长整型或双精度浮点型的值。> db.mycollection.updateOne({"name":"foo"},{$inc:{"age":10}}) { "acknowledged" : true, "matchedCount" : 1.0, "modifiedCount" : 1.0 }
另外,如果需要增加值的键不存在时,将创建这个键,并将其值设置为增加量。
数组修改器
“$push”添加元素如果数组已经存在,$push 会向已有数组末位添加一个元素,如果没有就创建一个新的数组。
例如对下边文档,content键数组后添加两个元素:
> db.mycollection.updateOne({"name":"foo"},{$push:{"content":"hello1"}}) > db.mycollection.updateOne({"name":"foo"},{$push:{"content":"hello2"}}) { "_id" : ObjectId("5a52dd8e87df659d59e547de"), "name" : "foo", "content" : [ "hello1", "hello2" ] }
上边的也可以用 $each 来更简单的改写:
> db.mycollection.updateOne({"name":"foo"},{$push:{"content":{$each : ["hello3", "hello4"]}}})
$each 可以通过一次操作将一些新元素添加到数组。
另外还可以与 slice 及 sort 操作符搭配使用,
如 slice:-10
slice 会保证数组添加只保留不大于10的元素个数,如果元素个数大于10,只有最后的10个保留,可以以此构建队列。
sort 可以将数组中的对象进行排序,然后保留个数。
二者都必须和push配合使用,且必须使用each。
> db.mycollection.updateOne({"name":"foo"}, {$push:{"top5":{ $each : [{"name":"t5","rating":"91"}, {"name":"t6","rating":"90"}], $slice: -5, $sort:{"rating":-1}}}}) "top5" : [ { "name" : "t2", "rating" : "96" }, { "name" : "t3", "rating" : "93" }, { "name" : "t4", "rating" : "92" }, { "name" : "t5", "rating" : "91" }, { "name" : "t6", "rating" : "90" } ]
“$addToSet”保证元素不重复
类似$push 的用法,可以和 each 一起使用。
删除元素
几个从数组中删除元素的方法。$pop 可以从头或尾删除元素。
> db.mycollection.updateOne({"name":"foo"},{$pop:{"content":1}}) #尾部删除1个元素 > db.mycollection.updateOne({"name":"foo"},{$pop:{"content":-1}}) #头部删除1个元素
另外可以使用 $pull 来删除元素
> db.mycollection.updateOne({"name":"foo"},{$pull:{"content":"hello2"}})
基于位置的数组修改
很多情况下,不预先查询就不知道修改的数组的下标,可使用定位操作符 $ ,用来定位查询文档已经匹配的数组元素并进行更新。
> db.mycollection.updateOne({"top5.name":"t2"},{$set:{"top5.$.name":"tt2"}}) "top5" : [ { "name" : "tt2", "rating" : "96" }, { "name" : "t3", "rating" : "93" }, { "name" : "t4", "rating" : "92" }, { "name" : "t5", "rating" : "91" }, { "name" : "t6", "rating" : "90" } ]
update的两个参数
update({}, {$set:{}}, false, true)
参数有两个boolean参数,第一个false代表,如果没有查询到匹配条件的文档,不需要进行对应的插入,即如果为true,无则插入。第二个true代表,更新匹配条件的所有文档,如果为false,则只更新第一条记录。
相关文章推荐
- MongoDB学习 (四):创建、读取、更新、删除(CRUD)快速入门
- MongoDB 创建、更新、删除 文档
- MongoDB学习笔记-创建、更新、删除文档
- MongoDB的创建、更新和删除
- mongodb_创建、删除、更新
- MongoDB的用户创建更新及删除
- mongodb_创建、删除、更新 .
- mongodb_创建、删除、更新(转并学习)
- MongoDB学习 (四):创建、读取、更新、删除(CRUD)快速入门
- MongoDB(三):创建、更新及删除文档
- MongoDB学习 (四):创建、读取、更新、删除(CRUD)快速入门
- MongoDB学习 (四):创建、读取、更新、删除(CRUD)快速入门
- MongoDB学习 (四):创建、读取、更新、删除(CRUD)快速入门
- windows下mongodb基础玩法系列二CURD操作(创建、更新、读取和删除)
- (4)详解MongoDB的创建、更新、删除文档
- MongoDB(二)创建更新删除文档
- MongoDB创建表步骤,Mongo常用的数据库操作命令,查询,添加,更新,删除_MongoDB 性能监测
- MongoDB笔记二之创建、更新及删除文档 推荐
- MongoDB 的创建、查询、更新、删除
- [转载]MongoDB学习 (四):创建、读取、更新、删除(CRUD)快速入门