首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

MongoDB学习札记(四)——CRUD之 删除

2012-12-25 
MongoDB学习笔记(四)——CRUD之 删除8、如何删除文档?语法格式:db.colection.remove(query, justone)对

MongoDB学习笔记(四)——CRUD之 删除

8、如何删除文档?


语法格式:db.colection.remove(<query>, <justone>);


对应与SQL中的DELETE语句,<query>相当于where条件,<justone>相当于limit 1。

只有当<justone>的值为true或1时,只删除第一条符合条件的文档:

> db.zyv.find();

{ "_id" : ObjectId("50c890633c5d2c447b69b483"), "title" :"google" }

{ "_id" : ObjectId("50c890633c5d2c447b69b484"), "title" :"google" }

{ "_id" : ObjectId("50c890633c5d2c447b69b485"), "title" :"google" }

> db.zyv.remove({title:'google'},1);

> db.zyv.find();

{ "_id" : ObjectId("50c890633c5d2c447b69b484"), "title" : "google" }

{ "_id" : ObjectId("50c890633c5d2c447b69b485"), "title" : "google" }


示例中集合zyv中有3个title为”google”的文档,当调用db.zyv.remove({title:'google'},1);后,只删除了第一个符合条件的文档,集合zyv中还剩下两个title为”google”的文档。


<query>的值可以包含正则表达式,如:

> db.bios.remove( { ’name.first’ : /^G/ } );


则是删除子文档name中first属性以G开头的所有文档。


原子操作:当<query>参数匹配多个文档时,remove的删除操作并不是原子操作,即:所有匹配文档的删除并不是事务性的,对于大数据量来说,在删除的过程中也可能其他进程正在读取数据,这将导致数据的不一致。使用$atomic选项可以强制将所有匹配的删除作为一个原子操作来处理:

> db.zyv.remove( { title: ‘google’, $atomic: 1 } );



清空表数据。remove()方法根据<query>参数删除符合条件的文档。如果不传参数<query>,则删除所有记录(OMG !再次牢记“慎重”!)。所以remove() 相当于SQL 里面的delete * 。如果要快速删除集合及集合的索引,可以使用db.collection.drop()方法, 相当于SQL 里面的drop table 。

?> db.zyv.drop();

? true


如果集合zyv存在(不管是否有文档),drop()方法操作完成都会返回true,如果集合不存在,则返回false。


drop ()优先于remove()。当需要清空集合数据时,drop()方法有比remove()方法更高的效率,同时还可以清除已有的索引。在SQL中,我们清空表用DELETE *而不使用drop,因为我们需要保留表的结构(列、索引、约束),而在NoSQL中集合是无结构的,不会有这样的顾虑,因此首选drop() ?。

热点排行