MongoDB——创建、更新、删除

Posted on 2013-01-11 21:25  chace0120  阅读(201)  评论(0编辑  收藏  举报

1.  批量插入限制

MongoDB中使用批量插入时有限制,消息长度最大为16MB。

2.  删除集合

直接删除集合比删除文档更快,整个集合都被删除了,所有的索引也都不见了。删除集合如下:

1 >db.drop_collection(“foo”);

3.  更新文档

除了使用update方法更新文档外,还可以使用修改器。使用修改器时,“_id”的值不能改变。

$inc修改器:

一种特殊的键,用来指定复杂的更新操作,例如调整、增加或删除键,还可能是操作数组或者内嵌文档。用法如下:

1 >db.analytics.update({“url” : “www.example.com”}, {“$inc” :{“pageviews” : 1}})

“$inc”表示将“pageviews”键的值加1,PHP程序员需要注意的是“$”符号在PHP语言里是被占用的,那么可以通过设置php.ini文件的mongo.cmd_char来用其他字符替代“$”符号。

“$inc”只能用于整数、长整数或者双精度浮点数,且“$inc”键的值必须为数字,不能使用字符串、数组或其他非数字的值。

$set修改器:

“$set”用来指定一个键的值。如果这个键不存在,则创建它。用法如下:

1 >db.users.update({“name” : “joe”}, {“$set” : {“favorite book” : “green eggs and ham”}})

那么原文档中的“favorite book”属性就变成为了“green eggs and ham”。

“$set”不仅可以修改键的数据类型,还可以修改内嵌文档,如下:

 1 >db.blog.posts.findOne()
 2 {
 3          ……
 4          “author” : {
 5 
 6                    “name” : “joe”,
 7 
 8                    “email” : “joe@example.com”
 9 
10 }
11         ……
12 }
13 
14 >db.blog.posts.update({“author.name” : “joe”}, {“$set” : {“author.name” : “joe schmoe”}})

若不需要某个键时,可以用“$unset”将键完全删除,如下:

1 >db.users.update({“name” : “joe”}, {“$unset” : {“favorite book” : 1}})

$push修改器:

如果指定的键已经存在,“$push”会向已有的数组末尾加入一个元素,要是没有就会创建一个新的数组。如下:

1 >db.blog.posts.update({“title” : “A blog post”}, {“$push” : {“comment” : {“name” : “joe”, “content” : “nice post.”}}})

$addtoSet修改器:

$addtoSet和$each的配合,可以避免重复地将多个值插入到数组中,如下:

1 >db.users.update({“username” : “joe”}, {“$addtoSet” : {
2 …”emails” : {“$each” : [“joe@php.net”, “joe@example.com”, “joe@python.org”]}}})

$pop修改器:

{$pop : {key : 1}}从数组末尾删除一个元素,{$pop : {key : -1}}则从头部删除。

$push修改器:

1 >db.lists.update({}, {“$pull” : {“todo” : “laundry”}})

数组定位修改器:

通过位置定位如下:

1 >db.blog.update({“post” : post_id}, {“$inc” : {“comments.0.votes” : 1}})

定位操作符“$”用来定位查询文档已经匹配的元素,并进行更新。用法如下:

1 >db.blog.update({“comments.author” : “John”, {“$set” : {“comments.$.author” : “Jim”}}})

默认情况下,更新只能对符合匹配条件的第一个文档执行操作,要使所有匹配到的文档都得到更新,可以设置update的第4个参数为true(第三个参数用于upsert)。

还有一个save函数方便更新,save函数以”_id”为匹配条件,若参数文档中包含“_id”键,则save会调用upsert,否则会调用插入。

Copyright © 2024 chace0120
Powered by .NET 9.0 on Kubernetes