日期:2014-05-16  浏览次数:20416 次

Mongo官方文档翻译 (五)
删除操作!
官方文档地址:http://docs.mongodb.org/manual/applications/delete/


删除


在数据库的四种基本操作中,删除操作是指从MongoDB的聚集中删除文档的操作!


概述


mongo shell中的remove()方法为我们提供了这项功能,而且在driver中也是类似的!

注意:对于下列的driver versions中,所有的写操作都要通过getlastError操作来来确定
写操作的结果:

C#, version 0.7
Java, version 2.10.0
Node.js, version 1.2
Perl, version 0.601.1
PHP, version 1.4
Python, version 2.4
Ruby, version 1.8
删除


使用remove()方法从聚集中删除一个文档,remove()方法有如下句法:

db.collection.remove( <query>,<justOne> )

SQL中类似的操作:remove()方法类似于DELETE子句,而且:
1.<query>参数类似于WHERE子句,而且:
2.<justOne>参数采用给一个boolean值而且和LIMIT 1的功能是一样的。
remove()会从聚集中删除文档,如果你没有指定,<query>参数,remove()方法会删除聚集中的全部
文档,但是不会删除聚集中的indexs(索引)!

注意:对于大量的删除操作,先将你要删除的聚集中你想保留的数据复制到一个新的集合中,然后
在要删除的文档上进行drop()操作会更高效!


通过下面的示例阐述了remove()方法的使用:

1.如果有<query>参数,remove()方法会删除所有匹配<query>参数的文档!

下面的操作删除了bios聚集中所有子文档name的first字段的值以字母G开头的文档:

db.bios.remove( {'name.first' : /^G/} )
2.如果有<query>参数,并且将<justOne>参数设置为true或1,remove()方法只会删除匹配的第一个文档!

下面的操作删除了一个文档,该文档的turing字段的值为true:
db.bios.remove( {turing:ture},1 )

3.如果没有<query>参数,remove()方法会删除聚集中的所有文档!

下面的操作删除了bios聚集中所有的文档:

db.bios.remove()

注意:remove()方法与drop()方法不是等价的!


如果要删除聚集中的全部文档,这样做会更快:直接drop掉整个聚集,这样会连同indexes一起删除,然后再
重建聚集和indexes!

Capped Collection

不能再一个Capped Collection上使用remove()方法

隔离

如果<query>参数在聚集中匹配到了多个文档,删除操作也许会与该聚集上的其他写操作交错进行。
对于一个独立的聚集,你可以使用$isolated 隔离操作符来改变上述remove()的行为,这样可以有效
的将remove()操作与其他的写操作隔离开。在<query>参数中使用$isolated :1来进行隔离: