原创:牛津小马哥
在上周的推文中,我们介绍了MongoDB的数据库和集合的操作,现在,让我们来继续学习mongodb的另一个操作:CRUD
CRUD操作:创建、读取、更新、删除文档。
创建操作(C)
创建或插入操作即向集合“collection”添加新的文档“documents”。如果插入时集合不存在,插入操作会创建该集合。
插入一个文档到文档集合中:
- db.collection.insert()
> db.new_db.insert({name:'good day',content:{number:"8",place:"part"}})
WriteResult({ "nInserted" : 1 })
同时插入多个文档到集合中:
- db.collection.insertMany()
>db.new_db.insertMany([{name:"rainy",content:{"number":"6","place": "part"}},{name:"sunny",content: {"number":"16", "place": "part"}}])
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("5df5ff197a95a0ed40e59705"),
ObjectId("5df5ff197a95a0ed40e5970v")
]
}
读取操作(R)
从集合中检索文档;即从文档中查询集合。MongoDB提供了以下方法来读取集合中的文档:
- db.collection.find()
可以指定过滤器或条件来标识返回的文档。
查询所有数据
> db.new_db.find()
{ "_id" : ObjectId("5df5fd2d7a95a0ed40e59705"), "name" : "good day", "content" : { "number" : "6", "place" : "part" } } { "_id" : ObjectId("5df5ff197a95a0ed40e5970v"), "name" : "rainy", "content" : { "number" : "6", "place" : "part" } }
{ "_id" : ObjectId("5df5ff197a95a0ed40e5970v"), "name" : "sunny", "content" : { "number" : "16", "place" : "part" } }
如果你需要以易读的方式来读取数据,可以使用pretty() 方法
pretty()
> db.new_db.find().pretty()
"_id" : ObjectId("5df5fd2d7a95a0ed40e59705"),
"name" : "good day",
"content" : {
"number" : "6",
"place" : "part"
}
}
"_id" : ObjectId("5df5ff197a95a0ed40e59709"),
"name" : "rainy",
"content" : {
"number" : "8",
"place" : "part"
}
}
"_id" : ObjectId("5df5ff197a95a0ed40e5970v"),
"name" : "sunny",
"content" : {
"number" : "16",
"place" : "part"
}
}
查询中也可指定只返回哪些键,返回的结果只有“name”这个键的数据
> db.new_db.find({},{name:1})
{ "_id" : ObjectId("5df5fd2d7a95a0ed40e59705"), "name" : "good day" }
{ "_id" : ObjectId("5df5ff197a95a0ed40e59709"), "name" : "rainy" }
{ "_id" : ObjectId("5df5ff197a95a0ed40e5970v"), "name" : "sunny" }
查询数据库中带有指定键值的文档数据
> db.new_db.find({name:"rainy"})
{ "_id" : ObjectId("5df5ff197a95a0ed40e59709"), "name" : "rainy", "content" : { "number" : "8", "place" : "part" } }
$in方法:查询某个键满足在“$in”中指定的集合中的子集(检索name的字段值为“sunny”或者“rainy”的所有文档)
> db.new_db.find({name:{$in:["sunny","rainy"]}})
{ "_id" : ObjectId("5df5ff197a95a0ed40e59709"), "name" : "rainy", "content" : { "number" : "8", "place" : "part" } }
{ "_id" : ObjectId("5df5ff197a95a0ed40e5970v"), "name" : "sunny", "content" : { "number" : "16", "place" : "part" } }
AND条件:复合查询可以在集合文档的多个字段上指定条件。查询出的文档需同时满足指定的条件。
> db.new_db.insert({name:"rainy","content" : { "number" : "6", "place" : "part"},time:"15"})
WriteResult({ "nInserted" : 1 })
> db.new_db.find({name:"rainy",time:"15"})
{ "_id" : ObjectId("5df60eee7a95a0ed40e5970b"), "name" : "rainy", "content" : { "number" : "6", "place" : "part" }, "time" : "15" }
$or:查询出的文档需至少满足指定的一个条件
> db.locla.find({$or:[{name:"sunny"},{time:"15"}]})
{ "_id" : ObjectId("5df5ff197a95a0ed40e5970v"), "name" : "sunny", "content" : { "number" : "16", "place" : "part" } }
{ "_id" : ObjectId("5df60eee7a95a0ed40e5970b"), "name" : "rainy", "content" : { "number" : "8", "place" : "part" }, "time" : "15" }
Mongodb中的条件操作符:$gt(>)、$gte(>=)、$lt(<)、$lte(<=)、$ne(!=)
> db.new_db.insert({name:"test","content" : { "number" : "6", "place" : "part"},time:15})
WriteResult({ "nInserted" : 1 })
> db.new_db.find({time:{$gte:10}})
{ "_id" : ObjectId("5df612ba7a95a0ed40e5970c"), "name" : "test", "content" : { "number" : "8", "place" : "part" }, "time" : 15 }
Like:模糊查询
(查询包含字母“u”的结果,等同于“like '%a%'”)
> db.new_db.find({name:/u/})
{ "_id" : ObjectId("5df5ff197a95a0ed40e5970v"), "name" : "sunny", "content" : { "number" : "16", "place" : "part" } }
Count:查询记录条数,看数据中有多少条文档。
> db.new_db.count()
5
Sort :对数据进行排序
- 升序
> db.new_db.find({"name": "sunny"}).sort({"time": -1})
{ "_id" : ObjectId("5df5ff197a95a0ed40e5970v"), "name" : "sunny", "content" : { "number" : "16", "place" : "part" } }
- 降序
> db.new_db.find({"name": "sunny"}).sort({"time": 1})
{ "_id" : ObjectId("5df5ff197a95a0ed40e5970v"), "name" : "sunny", "content" : { "number" : "16", "place" : "part" } }
Limit:限制返回的结果数量
> db.new_db.find().limit(2)
{ "_id" : ObjectId("5df5fd2d7a95a0ed40e59705"), "name" : "good day", "content" : { "number" : "6", "place" : "part" } } { "_id" : ObjectId("5df5ff197a95a0ed40e59709"), "name" : "rainy", "content" : { "number" : "8", "place" : "part" } }
更新操作(U)
使用 update() 和 save() 方法来更新集合中的文档
更新操作是修改现有的文档。有以下方法来更新集合文档。
- db.collection.updateOne()
- db.collection.updateMany()
- db.collection.replaceOne()
指定条件或过滤器标识要更新的文档,再使用“$set”更新数据的内容。
> db.new_db.updateOne({name:"test"},{$set:{time:10}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
在MongoDB中,更新操作针对单个集合。对多个文档进行更新,使用updateMany即可。
db.collection.replaceOne() 用来替换基于过滤器的集合中的一个文件。
要替换除_id 字段以外的文档的所有内容,请将一个全新的文档作为第二个参数传递给:
db.collection.replaceOne()
替换文档时,替换文档必须仅由字段/值对组成。替换文档可以具有与原始文档不同的字段
> db.new_db.replaceOne({name:"good day"},{name:"good day",content:"modified",time:22})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
删除操作(D)
指定条件或过滤器来找到要删除的文档。有以下删除集合文档的方法。
- db.collection.deleteOne()
- db.collection.deleteMany()
- db.collection.remove()
> db.new_db.deleteOne({name:"good day"})
{ "acknowledged" : true, "deletedCount" : 1 }
查询出“name”值为“good day”的文档 ,并将其删除 。
deleteOne:即使多个文档可能与指定过滤器匹配,也最多删除一个与指定过滤器匹配的文档。
deleteMany:删除所有匹配指定过滤条件的文档。
Remove:删除单个文档或与指定过滤器匹配的所有文档。不传入条件时,删除所有的文档。
以上内容便是mongodb的CRUD操作介绍,感谢阅读!