设为首页 加入收藏

TOP

MongoDB入门4――更新文档和修改器2 (二)
2014-11-24 07:50:48 来源: 作者: 【 】 浏览:9
Tags:MongoDB 入门 更新 文档 修改器
}
>

> var user = {"name":"Tom","emailaddrs":["a@b.com","b@b.com"]};
> db.users.insert(user);
> db.users.find();
{ "_id" : ObjectId("4ee49adeaf9c9fecc9c9cf62"), "name" : "Tom", "emailaddrs" : [ "a@b.com", "b@b.com" ] }
> 现在我们需要再加一个邮件地址:c@b.com,我们可以使用这个修改器添加新的邮件地址:


> db.users.update({"_id" : ObjectId("4ee49adeaf9c9fecc9c9cf62")},{"$addToSet":{"emailaddrs":"c@b.com"}});
> db.users.find();
{ "_id" : ObjectId("4ee49adeaf9c9fecc9c9cf62"), "emailaddrs" : [ "a@b.com", "b@b.com", "c@b.com" ], "name" : "Tom" }
>

> db.users.update({"_id" : ObjectId("4ee49adeaf9c9fecc9c9cf62")},{"$addToSet":{"emailaddrs":"c@b.com"}});
> db.users.find();
{ "_id" : ObjectId("4ee49adeaf9c9fecc9c9cf62"), "emailaddrs" : [ "a@b.com", "b@b.com", "c@b.com" ], "name" : "Tom" }
> 再次执行上面的操作是不会重复添加邮件地址的。

$each修改器(配合$addToSet修改器使用)
$addToSet配合$each修改器可以实现一次批量修改。接着上面邮件列表的例子,如果一次需要添加几个邮件地址,使用$ne和$push就不能一次直接添加多个地址。操作如下:


> db.users.update({"_id" : ObjectId("4ee49adeaf9c9fecc9c9cf62")},{"$addToSet":{"emailaddrs":{"$each":["d@b.com","e@b.com"]}}});
> db.users.find();
{ "_id" : ObjectId("4ee49adeaf9c9fecc9c9cf62"), "emailaddrs" : [ "a@b.com", "b@b.com", "c@b.com", "d@b.com", "e@b.com" ], "name" : "Tom" }
>

> db.users.update({"_id" : ObjectId("4ee49adeaf9c9fecc9c9cf62")},{"$addToSet":{"emailaddrs":{"$each":["d@b.com","e@b.com"]}}});
> db.users.find();
{ "_id" : ObjectId("4ee49adeaf9c9fecc9c9cf62"), "emailaddrs" : [ "a@b.com", "b@b.com", "c@b.com", "d@b.com", "e@b.com" ], "name" : "Tom" }
> $pop修改器

这个修改器可以将数组任何一端的第一个值删除。{"pop":{key:1}}将数组尾部值删掉,{"pop":{key:-1}}:将数组头部值删除。演示一下:


> db.users.update({"_id" : ObjectId("4ee49adeaf9c9fecc9c9cf62")},{"$pop":{"emailaddrs":1}});
> db.users.update({"_id" : ObjectId("4ee49adeaf9c9fecc9c9cf62")},{"$pop":{"emailaddrs":-1}});
> db.users.find();
{ "_id" : ObjectId("4ee49adeaf9c9fecc9c9cf62"), "emailaddrs" : [ "b@b.com", "c@b.com", "d@b.com" ], "name" : "Tom" }
>

> db.users.update({"_id" : ObjectId("4ee49adeaf9c9fecc9c9cf62")},{"$pop":{"emailaddrs":1}});
> db.users.update({"_id" : ObjectId("4ee49adeaf9c9fecc9c9cf62")},{"$pop":{"emailaddrs":-1}});
> db.users.find();
{ "_id" : ObjectId("4ee49adeaf9c9fecc9c9cf62"), "emailaddrs" : [ "b@b.com", "c@b.com", "d@b.com" ], "name" : "Tom" }
> 这样,第一个和最后一个邮件地址都被删除了。

$pull修改器
这个修改器也是用来删除数组中的元素的,但是是通过条件匹配来删除所有条件满足的值,而不仅仅是删某一个。接上面的例子,我们可以用它删除c@b.com


> db.users.update({"_id" : ObjectId("4ee49adeaf9c9fecc9c9cf62")},{"$pull":{"emailaddrs":"c@b.com"}});
> db.users.find();
{ "_id" : ObjectId("4ee49adeaf9c9fecc9c9cf62"), "emailaddrs" : [ "b@b.com", "d@b.com" ], "name" : "Tom" }
>

> db.users.update({"_id" : ObjectId("4ee49adeaf9c9fecc9c9cf62")},{"$pull":{"emailaddrs":"c@b.com"}});
> db.users.find();
{ "_id" : ObjectId("4ee49adeaf9c9fecc9c9cf62"), "emailaddrs" : [ "b@b.com", "d@b.com" ], "name" : "Tom" }
> 数组定位修改器

数组定位可以通过两种方式实现:下标和$(定位操作符)。下标是从0开始的。

数组定位方式修改第一个邮件地址:


> db.users.update({"_id" : ObjectId("4ee49adeaf9c9fecc9c9cf62")},{"$set":{"emailaddrs.0":"bbb@b.com"}});
> db.users.find();
{ "_id" : ObjectId("4ee49adeaf9c9fecc9c9cf62"), "emailaddrs" : [ "bbb@b.com", "d@b.com" ], "name" : "T
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇MongoDB:mongodb的分片技术 下一篇MongoDB入门3――更新文档和修改..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·C语言中,“指针”用 (2025-12-26 15:20:18)
·在c语言的指针运算中 (2025-12-26 15:20:15)
·C语言-函数指针与函 (2025-12-26 15:20:12)
·求navicat for mysql (2025-12-26 13:21:33)
·有哪位大哥推荐一下m (2025-12-26 13:21:30)