mongodb(四)-文档

参考:

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"}}}])

猜你喜欢

转载自joandora.iteye.com/blog/2230782