MongoDB简单笔记二

看MongoDB: The Definitive Guide做的笔记,Not a tutorial

Mongodb中有document,collection,database

关系为database里有多个collection,每个collection里有多个document

document就是以key-value的形式存放的,value也可以是document

在shell里,db代表当前所使用的数据库,

show dbs #显示所有数据库
db.version() #显示Mongodb的版本号

以下"collection"代表任意collection

db.collection.update #mongodb的update是atomic,假如有两个人同时update同一个数据,两个都会生效,数据的状态是最后update的状态(last update win)

db.collection.remove #不加参数则全部删除,但保留index

x = db.collection.findOne()
x.num = 42
db.collection.save(x) #shell中一种比用update来更新的更好办法

db.drop_collection("name_of_collection") #彻底删除

db.collection.insert() #插入document

update里用的modifier

$set #用来设置一个document,如不存在则创建该document

{"$set" : {"author.name" : "joe schmoe"}}

$unset #用来删除一个document

 

$inc #用来增加一个document的value部分,value必需是数字。如不存在则创建该document

{"$inc" : {"score" : 10000}}

$push #用来向一个document的value部分,以数组的方式

{$push : {"comments" :{"name" : "joe", "email" : "[email protected]", "content" : "nice post."}}

$ne #与$push配合使用,不存在存会添加,存在就不会添加

{"authors cited" : {"$ne" : "Richie"}}, {$push : {"authors cited" : "Richie"}}

$addToSet #同上,但是是单独使用的.有的时候你不确定某个document到底存不存在,用这个就不会造成数据的重复

{"$addToSet" : {"emails" : "[email protected]"}}

$each #与$addToSet配合使用,添加数组

 {"$addToSet" :{"emails" : {"$each" : ["[email protected]","[email protected]","[email protected]"]}}

$pop #像栈一样删除,随便从哪头开始

{$pop : {key : 1}}
{$pop : {key : -1}}

$pull #根据所给的KEY删除指定的document,假如有多个KEY匹配,则删除多个document

{"$pull" : {"todo" : "laundry"}}

假如有下面这样的一个docment

{
"_id" : ObjectId("4b329a216cc613d5ee930192"),
"content" : "...",
"comments" : [
  {
    "comment" : "good post",
    "author" : "John",
    "votes" : 0
  },
  {
    "comment" : "i thought it was too short",
    "author" : "Claire",
    "votes" : 3
  },
  {
    "comment" : "free watches",
    "author" : "Alice",
    "votes" : -1
  }]
}

我们现在想要更新第一个名为good post的comments的votes,可以这样做

db.blog.update({"post" : post_id}, {"$inc" : {"comments.0.votes" : 1}}) #看见没,可以像操作数组一样,多方便啊

现在我们来把这个comment的author由John改成Jim,但如果这个时候我不知道John是在数组里的第几个,即我不知道index,这个时候可以用$,即原来用index的地主改成$,就像下面这样

db.blog.update({"comments.author" : "John"},{"$set" : {"comments.$.author" : "Jim"}})

update还有另一种形式,就是其第三个参数设置为true,使之成为一个upsert

db.analytics.update({"url" : "/blog"}, {"$inc" : {"visits" : 1}}, true)

上面的update包含了两个意思,以{url : "/blog"}进行查询,成功找到就更新,没有找到就创建

这样我们就不用自己写代码来判断存在或是不存在的情况了

update默认情况下只会更新第一个匹配的到的数据,如果要更新所有都匹配的数据,只要把它的第四个参数也设置为true就行

 

 

 

你可能感兴趣的:(mongodb,学习,笔记)