参考:
http://www.yiibai.com/mongodb/mongodb_insert_document.html
一、insert
语法:db.COLLECTION_NAME.insert(Document)
> db.joan3.insert({_id:ObjectId(1234567890),title:'JOAN'}) WriteResult({ "nInserted" : 1 })
如果集合在数据库中不存在,那么mongodb将自动创建此集合,然后把它插入文档。
_id
注意其中一个属性:_id。如果我们不指定这个id,mongodb会自动分配一个独特的ObjectId。_id是12个字节的十六进制数,12个字节划分如下:
_id: ObjectId(4 bytes timestamp, 3 bytes machine id, 2 bytes process id, 3 bytes incrementer)
批量插入:
db.joan3.insert({},{})
二、find
非结构化查询所有文件。
语法:db.COLLECTION_NAME.find()
pretty方法:格式化显示结果
语法:db.COLLECTION_NAME.find().pretty()
Equality | {<key>:<value>} | db.mycol.find({"by":"tutorials point"}).pretty() | where by = 'tutorials point' |
Less Than | {<key>:{$lt:<value>}} | db.mycol.find({"likes":{$lt:50}}).pretty() | where likes < 50 |
Less Than Equals | {<key>:{$lte:<value>}} | db.mycol.find({"likes":{$lte:50}}).pretty() | where likes <= 50 |
Greater Than | {<key>:{$gt:<value>}} | db.mycol.find({"likes":{$gt:50}}).pretty() | where likes > 50 |
Greater Than Equals | {<key>:{$gte:<value>}} | db.mycol.find({"likes":{$gte:50}}).pretty() | where likes >= 50 |
Not Equals | {<key>:{$ne:<value>}} | db.mycol.find({"likes":{$ne:50}}).pretty() | where likes != 50 |
三、AND
语法:db.COLLECTION_NAME.find({key1:value1,key2:value2})
> db.joan3.find() { "_id" : { }, "title" : "JOAN" } { "_id" : ObjectId("55ae4d2b97f4f4c667fe2976"), "title" : "joan" } { "_id" : ObjectId("55ae57abac51d53927cd1440"), "age" : 10 } { "_id" : ObjectId("55ae57ebac51d53927cd1441"), "name" : "JOAN" } { "_id" : ObjectId("55ae5817ac51d53927cd1442"), "name" : "JOAN", "age" : 10 } > db.joan3.find({name:'JOAN',age:10}) { "_id" : ObjectId("55ae5817ac51d53927cd1442"), "name" : "JOAN", "age" : 10 }
四、OR
语法:db.COLLECTION_NAME.find({$or:[{key1:value1},{key2:value2}}]})
> db.joan3.find({$or:[{name:'JOAN'},{age:10}]}) { "_id" : ObjectId("55ae57abac51d53927cd1440"), "age" : 10 } { "_id" : ObjectId("55ae57ebac51d53927cd1441"), "name" : "JOAN" } { "_id" : ObjectId("55ae5817ac51d53927cd1442"), "name" : "JOAN", "age" : 10 }
五、AND和OR一起用
age=10且(name=‘JOAN’或title='joan')
> db.joan3.find({age:10},{$or:[{name:'JOAN'},{title:'joan'}]}) { "_id" : ObjectId("55ae57abac51d53927cd1440") } { "_id" : ObjectId("55ae5817ac51d53927cd1442") }
六、update
db.COLLECTIONS_NAME.update(SELECTION_CRITERIA,UPDATED_DATA)
{ "_id" : ObjectId(5983548781331adf45ec5), "title":"MongoDB Overview"} { "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"} { "_id" : ObjectId(5983548781331adf45ec7), "title":"Tutorials Point Overview"} --下面的例子将设置新标题'MongoDB Overview'的文件,更新其标题是“New MongoDB Tutorial” >db.mycol.update({'title':'MongoDB Overview'},{$set:{'title':'New MongoDB Tutorial'}}) >db.mycol.find() { "_id" : ObjectId(5983548781331adf45ec5), "title":"New MongoDB Tutorial"} { "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"} { "_id" : ObjectId(5983548781331adf45ec7), "title":"Yiibai Overview"}
默认只更新单一文件,需要更新多个文件,需要添加一个参数:mutil:true
db.mycol.update({'title':'MongoDB Overview'},{$set:{'title':'New MongoDB Tutorial'}},{mutil:true})
七、save
下面的例子将取代文件具有_id=xxxx的文档:
>db.mycol.save( { "_id" : ObjectId(5983548781331adf45ec7), "title":"Yiibai New Topic", "by":"Yiibai" } ) >db.mycol.find() { "_id" : ObjectId(5983548781331adf45ec5), "title":"Yiibai New Topic", "by":"Yiibai"} { "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"} { "_id" : ObjectId(5983548781331adf45ec7), "title":"Yiibai Overview"}
八、remove
语法:db.COLLECTIONS_NAME.remove(DELLETION_CRITTERIA)
已存在如下集合:
{ "_id" : ObjectId(5983548781331adf45ec5), "title":"MongoDB Overview"} { "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"} { "_id" : ObjectId(5983548781331adf45ec7), "title":"Yiibai Overview"}
>db.mycol.remove({'title':'MongoDB Overview'}) >db.mycol.find() { "_id" : ObjectId(5983548781331adf45ec6), "title":"NoSQL Overview"} { "_id" : ObjectId(5983548781331adf45ec7), "title":"Yiibai Overview"}
删除得只剩第一个集合:
db.COLLECTIONS_NAME.remove(DELLETION_CRITTERIA,1)
TRUNCATE命令,将删除整个文档:
db.COLLECTIONS_NAME.remove()
九、sort
排序,类似于order by。
语法:db.COLLECTIONS_NAME.find().sort({KEY:1}) --1 升序排列,-1 降序排列,默认升序排列
十二、聚合
语法:db.COLLECTIONS_NAME.aggregate(AGGREGATE_OPERATION)
> { _id: ObjectId(7df78ad8902c) title: 'MongoDB Overview', description: 'MongoDB is no sql database', by_user: 'yiibai point', url: 'http://www.yiibai.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }, { _id: ObjectId(7df78ad8902d) title: 'NoSQL Overview', description: 'No sql database is very fast', by_user: 'yiibai point', url: 'http://www.yiibai.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 10 }, { _id: ObjectId(7df78ad8902e) title: 'Neo4j Overview', description: 'Neo4j is no sql database', by_user: 'Neo4j', url: 'http://www.neo4j.com', tags: ['neo4j', 'database', 'NoSQL'], likes: 750 },
> db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}]) { "result" : [ { "_id" : "yiibai point", "num_tutorial" : 2 }, { "_id" : "yiibai point", "num_tutorial" : 1 } ], "ok" : 1 }
$sum | 总结从集合中的所有文件所定义的值. | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}]) |
$avg | 从所有文档集合中所有给定值计算的平均. | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}]) |
$min | 获取集合中的所有文件中的相应值最小. | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}]) |
$max | 获取集合中的所有文件中的相应值的最大. | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}]) |
$push | 值插入到一个数组生成文档中. | db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}]) |
$addToSet | 值插入到一个数组中所得到的文档,但不会创建重复. | db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}]) |
$first | 根据分组从源文档中获取的第一个文档。通常情况下,这才有意义,连同以前的一些应用 “$sort”-stage. | db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}]) |
$last | 根据分组从源文档中获取最后的文档。通常,这才有意义,连同以前的一些应用 “$sort”-stage. | db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}]) |