MongoDB学习笔记(一)

来源:互联网 发布:导入数据错误 编辑:程序博客网 时间:2024/05/16 15:03

一、插入

db.foo.insert({"bar" : "baz"});

?批量插入


二、删除

db.user.remove();  //将会删除user集合中的所有文档

db.mailing.list.remove({"out-put" : true}); //删除list集合中所有"out-put"属性为true的文档


三、更新

更新操作是原子的,若两个更新同时发生,则按照到达服务器顺序先后执行

替换:db.user.update({"name" : "joe"} , joe);  //把user中name为"joe"的文档用新文档joe代替

需注意,若{"name" : "joe"}的查询条件返回的多个结果,替换可能会不成功,_id键不唯一。

修改器: db.analytics.update({"url" : "www.baidu.com"} , {"$inc" : {"pageviews" : 1}});//将pageviews属性的键值加1

     "$inc"只能用于整数、长整数、双精度浮点数,其他(null,bool,数组构成的字符串)会导致操作失败。且$inc的键值也必须为数字

其他修改器:"$set" 指定一个键值,如果键不存在就创建它。可以指定一个与原数据类型不同的数据,比如将字符串更新为一个数组。

修改内嵌文档:db.user.update({"name" : "joe"} , {"$set" , {"address.country" : "china"}});

     "$unset" 删除键

     "$push" 若指定的键已存在,向该数组末尾加入一个元素,否则创建一个新数组

     "$ne" 如果一个值不在数组里面就把它加进去,例:

db.papers.update({"author cited" : {"$ne" : "Rechiel"}} , {"$push" , {"author cited" : "Rechiel"}}); //如果"author cited"数组中没有"Richiel"就把它加入该数组。

     "$addToSet"  无重复无序向数组添加元素,结合"$each"可一次添加多个。

db.user.update({"name" : "joe"} , {"$addToSet" : { "emails" : { "$each" :["joe@php.net" , "joe@java.net"]}}});

    "$pop" {"$pop" : {"key" : 1}} 从数组末尾删除一个元素。 {"$pop" : {"key" : -1}}从数组开头删除一个元素。 
    "$pull" 删除特定元素。 db.user.update({"name" : "joe"} , {"$pull" : {"emails" : "joe@php.net"}});


    根据数组下标修改:     db.user.update({"name" : "joe"} , {"$inc" : {"comments.0.votes" : 1}});  //评论数组下标为0的元素的投票数加1
    定位操作符:db.user.update({"comments.author" : "john"} , {"$set" : {"comments.$.author" : "jim"}});  //将评论数组中作者为john的改为作者为jim

定位符只更新第一个匹配的元素。

MongoDB预留了些补白给文档,以适应大小变化,但是要超出的原来的空间,还是要分配一块新的空间。空间分配会减慢速度,而且随着数组边长MongoDB需要更长的时间遍历整个数组,对每个数组的修改也会慢下来


upsert: 更新时若没有查找到符合条件的文档,则创建新文档并在新文档的基础上进行更新操作。用法是为在update函数最后添加true作为第三个参数。

如:db.math.update({"count" : 12} , {"$inc" :{"count" : 3}} , true); //若没有找到count为12的文档,则创建新文档(count为12)并将count加3。(最终15)


更新多个文档:默认情况下,更新只对符合匹配的第一个文档执行操作。若要使所有匹配的文档都得到更新,可是设置update的第四个参数为true。

建议每次更新都显式的指定第四个参数,以应对将来可能的默认参数的改变。


             

























     
0 0
原创粉丝点击