Mongodb小结

预备工作:安装以及导入官方给的dataset:
https://raw.githubusercontent.com/mongodb/docs-assets/primer-dataset/dataset.json
mongoimport –db test –collection restaurants –drop –file dataset.json

1、插入
db.restaurants.insert(),如果插入的数据中含有_id字段则使用,没有的话,将自动生成一个objectid作为_id的值:
db.restaurants.insert(
{
“address” : {
“street” : “2 Avenue”,
“zipcode” : “10075”,
“building” : “1480”,
“coord” : [ -73.9557413, 40.7720266 ],
},
“borough” : “Manhattan”,
“cuisine” : “Italian”,
“grades” : [
{
“date” : ISODate(“2014-10-01T00:00:00Z”),
“grade” : “A”,
“score” : 11
},
{
“date” : ISODate(“2014-01-16T00:00:00Z”),
“grade” : “B”,
“score” : 17
}
],
“name” : “Vella”,
“restaurant_id” : “41704620”
}
)
上述插入如果成功了,将得到一个返回的写状态:
WriteResult({ “nInserted” : 1 })
在写入的时候还有一个ordered的值,值得关注,如果我们插入了一堆数据,那么如果失败了,系统则返回待处理的ordered的值,某种程度上用这个来做断点续传。
如果出错的话,可以通过WriteResult.writeConcernError查看错误的内容。.code, .errmsg

2、查询
db.collections_name.find()
db.restaurants.find()将返回所有的记录
指定查询条件:
Db.collections_name.find({ : , : , … });
如果你查询的字段是一级字段,则查询的方式为:
db.restaurants.find( { “borough”: “Manhattan” } )
而如果是一级字段里包含的一个数组元素或者对象元素,则:
db.restaurants.find( { “address.zipcode”: “10075” } )
and的查询
db.restaurants.find( { “cuisine”: “Italian”, “address.zipcode”: “10075” } )
只返回同时符合这两个条件的记录。

or的查询
db.restaurants.find(
{ $or: [ { “cuisine”: “Italian” }, { “address.zipcode”: “10075” } ] }
)
返回符合这两个条件中任意一个的记录。

更高级的查询看一下这篇英文文档吧,https://docs.mongodb.org/manual/tutorial/query-documents/

对查询的结果排序
db.restaurants.find().sort( { “borough”: 1, “address.zipcode”: 1 } )
其中1代表升序,-1代表降序。先按borough排序再按zipcode排序。

3、更新
更新一级字段:
db.restaurants.update(
{ “name” : “Juni” },
{
$set: { “cuisine”: “American (New)” },
$currentDate: { “lastModified”: true }
}
)
会返回:
WriteResult.nMatched -符合制定条件的数据
The number of documents selected for update. If the update operation results in no change to the document, e.g. $set expression updates the value to the current value, nMatched can be greater thannModified.
WriteResult.nModified -被修改的数据,可能没有被更新
The number of existing documents updated. If the update/replacement operation results in no change to the document, such as setting the value of the field to its current value, nModified can be less thannMatched.
比如:
#根据query条件修改,如果不存在则插入,允许修改多条记录 
            db.foo.update({‘yy’:5},{‘$set’:{‘xx’:2}},upsert=true,multi=true) 

4、删除
#删除yy=5的记录 
      db.foo.remove({‘yy’:5}) 
#删除所有的记录 
      db.foo.remove()