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,否则会调用插入。