注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

星期五

明天不上班

 
 
 

日志

 
 
关于我

一个特立独行的Java程序员,比较宅,上上网,写博客,听音乐,看电影。

网易考拉推荐

MongoDB学习笔记(四)  

2011-07-04 21:12:43|  分类: 非关系数据库 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

上一节课,提前讲了索引。

现在这节就主要讨论插入,更新和删除文档。

插入:MongoDB学习笔记(一)中有讲 这里就简单复习一下

首先声明MongoDB中保存的是BSON (不是JSON)

db.collection_name.insert()

--------------------------------------------------------------------------------------

> data = { name:'hurry',title:'software developer',skills:['java','js']}     

{

"name" : "hurry",

"title" : "software developer",

"skills" : [

"java",

"js"

]

}

> db.members.insert(data);

> db.members.findOne();   

{

"_id" : ObjectId("4e11a4f6c25a7683c014d968"),

"name" : "hurry",

"title" : "software developer",

"skills" : [

"java",

"js"

]

}

--------------------------------------------------------------------------------------

insert和save方法的区别

insert 不校验数据是否存在,直接插入,如果重复的话,报错.

save 插入重复数据,则改用update

---------------------------------------------------------------------------------------

> db.members.insert                                                                                                                                                              

function (obj, _allow_dot) {

    if (!obj) {

        throw "no object passed to insert!";

    }

    if (!_allow_dot) {

        this._validateForStorage(obj);

    }

    if (typeof obj._id == "undefined") {

        var tmp = obj;

        obj = {_id:new ObjectId};

        for (var key in tmp) {

            obj[key] = tmp[key];

        }

    }

    this._mongo.insert(this._fullName, obj);

    this._lastID = obj._id;

}

> db.members.save  

function (obj) {

    if (obj == null || typeof obj == "undefined") {

        throw "can't save a null";

    }

    if (typeof obj._id == "undefined") {

        obj._id = new ObjectId;

        return this.insert(obj);

    } else {

        return this.update({_id:obj._id}, obj, true);

    }

}

> db.members.find();   
{ "_id" : ObjectId("4e11a4f6c25a7683c014d968"), "name" : "hurry", "title" : "software developer", "skills" : [ "java", "js" ] }
{ "_id" : ObjectId("4e11adf4c25a7683c014d969"), "name" : "hurry", "title" : "software developer", "skills" : [ "java", "js" ] }
> data._id = ObjectId("4e11a4f6c25a7683c014d968")
ObjectId("4e11a4f6c25a7683c014d968")
> db.members.insert(data)                        
E11000 duplicate key error index: test.members.$_id_  dup key: { : ObjectId('4e11a4f6c25a7683c014d968') }
> db.members.save(data)  

---------------------------------------------------------------------------------------

删除:MongoDB学习笔记(一)中有讲 这里就简单复习一下

remove 方法 删除文档  function (t, justOne) 

参数1 条件 参数2 删除一个?boolean

如果要删除所有数据  有一个简单的方法 可以直接删除相应的集合 db.collection_name.drop() 这样的速度会更快


更新:

这里主要讲一下更新方法 MongoDB学习笔记(一)中有讲过最简单的更新 这里就不提了

使用修改器

$inc 增加值 (可以增加负数)只用于数字类型

-------------------------------------------------------------------------------------

> db.members.find()      

{ "_id" : ObjectId("4e11b35ec25a7683c014d96a"), "name" : "hurry", "title" : "software developer", "skills" : [ "java", "js" ], "age" : 25 }

> db.members.update({'name':'hurry'},{'$inc':{'age':1}})

> db.members.find()                                     

{ "_id" : ObjectId("4e11b35ec25a7683c014d96a"), "name" : "hurry", "title" : "software developer", "skills" : [ "java", "js" ],"age" : 26 }

-------------------------------------------------------------------------------------

$set 如果该键不存在,则增加它(使用$unset删除不想要的键)

-------------------------------------------------------------------------------------

> db.members.update({'name':'hurry'},{'$set':{'age':22}})

> db.members.find()                                      

{ "_id" : ObjectId("4e11b35ec25a7683c014d96a"), "name" : "hurry", "title" : "software developer", "skills" : [ "java", "js" ], "age" : 22}

-------------------------------------------------------------------------------------

数组修改器 $push $pop

-------------------------------------------------------------------------------------

> db.members.find()                                        

{ "_id" : ObjectId("4e11b35ec25a7683c014d96a"), "age" : 22, "name" : "hurry", "skills" : [ "java", "js" ], "title" : "software developer" }

> db.members.update({'name':'hurry'},{'$push':{'skills':'python'}})

> db.members.find()                                                

{ "_id" : ObjectId("4e11b35ec25a7683c014d96a"), "age" : 22, "name" : "hurry", "skills" : [ "java", "js", "python" ], "title" : "software developer" }

> db.members.update({'name':'hurry'},{'$pop':{'skills':1}})        

> db.members.find()                                        

{ "_id" : ObjectId("4e11b35ec25a7683c014d96a"), "age" : 22, "name" : "hurry", "skills" : [ "java", "js" ], "title" : "software developer" }

-------------------------------------------------------------------------------------

$addToSet 避免重复插入

-------------------------------------------------------------------------------------

> db.members.update({'name':'hurry'},{'$addToSet':{'skills':'python'}})

> db.members.find()                                                    

{ "_id" : ObjectId("4e11b35ec25a7683c014d96a"), "age" : 22, "name" : "hurry", "skills" : [ "java", "js", "python" ], "title" : "software developer" }

-------------------------------------------------------------------------------------

$each一次添加多个

--------------------------------------------------------------------------------------

> db.members.update({'name':'hurry'},{'$addToSet':{'skills':{$each:['python','mongoDB','PL/SQL']}}})

> db.members.find()                                                                                 

{ "_id" : ObjectId("4e11b35ec25a7683c014d96a"), "age" : 22, "name" : "hurry", "skills" : [ "java", "js", "python", "PL/SQL", "mongoDB" ], "title" : "software developer" }

----------------------------------------------------------------------------------------


更新多个文档(熟悉update方法的用法) 参见MongoDB学习笔记(一)中的参考资料

 

  评论这张
 
阅读(425)| 评论(0)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017