时间:2021-07-01 10:21:17 帮助过:15人阅读
一、插入文档
使用insert方法插入文档到一个集合中,如果集合不存在创建集合,有以下几种方法:
> db.users.insertOne(
... {
... name:"Marry",
... age:26,
... status:"pending"
... }
... )
{
"acknowledged" : true,
"insertedId" : ObjectId("565d23db556b61b96bdb1b20")
}
> db.users.insertMany(
... [
... {name:"Sue",age:25,status:"pending"},
... {name:"bob",age:24,status:"enrolled"},
... {name:"ann",age:28,status:"enrolled"}
... ]
... )
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("565d2d75556b61b96bdb1b21"),
ObjectId("565d2d75556b61b96bdb1b22"),
ObjectId("565d2d75556b61b96bdb1b23")
]
}
> post={"title":"My First blog","author":"Darren","content":"this is my first blog"}
{
"title" : "My First blog",
"author" : "Darren",
"content" : "this is my first blog"
}
> db.posts.insert(post)
WriteResult({ "nInserted" : 1 })
> db.users.insert(
... [
... {name:"test1",age:20,status:"pending"},
... {name:"test2",age:21,status:"enrolled"}
... ]
... )
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 2,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})
二、查询文档
1、db.collection.find(query,projection)
参数说明:
参数 类型 描述
query document 可选,返回指定条件的文档,如果查询所有文档,({})
projection document 可选,返回指定的字段,1表示true,0表示false
其中在query参数中,可以指定操作符,如大于,小于等等。
{ <field>: { $eq: <value> } }
例子说明:
> db.a.find({})
> db.a.find({_id:5})
{ "_id" : 5, "name" : { "first" : "Ole-Johan", "last" : "Dahl" }, "birth" : ISODate("1931-10-12T04:00:00Z"), "death" : ISODate("2002-06-29T04:00:00Z"), "contribs" : [ "OOP", "Simula" ], "awards" : [ { "award" : "Rosing Prize", "year" : 1999, "by" : "Norwegian Data Association" }, { "award" : "Turing Award", "year" : 2001, "by" : "ACM" }, { "award" : "IEEE John von Neumann Medal", "year" : 2001, "by" : "IEEE" } ] }
> db.a.find({_id:{$eq:5}}) #通过操作符的方式
{ "_id" : 5, "name" : { "first" : "Ole-Johan", "last" : "Dahl" }, "birth" : ISODate("1931-10-12T04:00:00Z"), "death" : ISODate("2002-06-29T04:00:00Z"), "contribs" : [ "OOP", "Simula" ], "awards" : [ { "award" : "Rosing Prize", "year" : 1999, "by" : "Norwegian Data Association" }, { "award" : "Turing Award", "year" : 2001, "by" : "ACM" }, { "award" : "IEEE John von Neumann Medal", "year" : 2001, "by" : "IEEE" } ] }
> db.a.find({_id:{$eq:5}},{name:1,first:1,last:1}) #返回name,first,last三个字段,默认返回_id
{ "_id" : 5, "name" : { "first" : "Ole-Johan", "last" : "Dahl" } }
> db.a.find({_id:{$eq:5}},{name:1,first:1,last:1,_id:0}) #指定_id不显示
{ "name" : { "first" : "Ole-Johan", "last" : "Dahl" } }
#查询_id大于1,小于3的文档
> db.a.find({_id:{$gt:1,$lt:5}},{name:1,first:1,last:1})
{ "_id" : 3, "name" : { "first" : "Grace", "last" : "Hopper" } }
{ "_id" : 4, "name" : { "first" : "Kristen", "last" : "Nygaard" } }
查询条件和操作符还有很多内容,具体请参考官方文档。
三、更新文档
mongodb提供以下几种方法对文档进行更新:
参数 类型 说明
filter document 同查询一样,当{}为空时,只更新集合的第一个文档
update document 更新内容,可以用更新操作符,如$set,$unset,$rename
upsert boolean 可选,当为true时,如果没有找到更新的文档,那么就插入新的文档
例子:
> db.a.updateOne(
... {_id :5},
... {$set :{year:2000}} #$set操作符表示更新字段的值
... )
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.a.find({_id:5},{year:1})
{ "_id" : 5, "year" : 2000 }
> db.a.updateMany(
... {_id :{$lt:5}},
... {$set:{year:1999}}
... )
{ "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 3 }
> db.a.find({_id:{$lt:5}},{year:1})
{ "_id" : 1, "year" : 1999 }
{ "_id" : 3, "year" : 1999 }
{ "_id" : 4, "year" : 1999 }
> db.a.replaceOne(
... {_id:5},
... {name:"darren",address:"1022",year:1988}
... )
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.a.find({_id:5})
{ "_id" : 5, "name" : "darren", "address" : "1022", "year" : 1988 }
db.users.update(
{ age: { $gt: 18 } },
{ $set: { status: "A" } },
{ multi: true }
)
四、删除文档
db.xxx.remove({}):删除xxx集合中所有文档,但不会删除集合本身和索引,remove必须带上过滤参数,空的{}表示删除所有。
注意:删除数据是永久性的,不能恢复,不能撤销。
当集合中数据库量非常大时,用remove删除有时很慢,drop()可以提供很好的速度,但是会把集合及索引全部删除。
除了remove方法,新版本提供以下方法进行删除:
可以带有过滤参数,删除匹配文档的第一个,如果不加任何过滤条件,则删除文档第一个。
db.users.deleteOne(
{ status: "reject" }
)
db.users.deleteMany(
{ status: "reject" }
)
另外mongodb还提供一个大杀器,可以把insert,update,delete放到一起批量执行:
db.collection.bulkWrite()
db.collection.bulkWrite(
[
{ insertOne : { "document" : { name : "sue", age : 26 } } },
{ insertOne : { "document" : { name : "joe", age : 24 } } },
{ insertOne : { "document" : { name : "ann", age : 25 } } },
{ insertOne : { "document" : { name : "bob", age : 27 } } },
{ updateMany: {
"filter" : { age : { $gt : 25} },
"update" : { $set : { "status" : "enrolled" } }
}
},
{ deleteMany : { "filter" : { "status" : { $exists : true } } } }
]
)
【三】MongoDB文档的CURD操作
标签:data reject 一起 collect cer div options 杀器 new