参考:
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()
操作 语法 例子 RDBMS 等同
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"}}}]) |