2013-05-04 70 views
0

我是新来的MongoDB,所以我意识到这是一个非常简单的问题,但我到处找,我找不到答案?基本上我试图找到包含单词“删除”的集合中的所有记录并删除它们。为了得到记录,我使用如何删除在MongoDB中使用“distinct”找到的记录?

db.collection.distinct("delete") 

(纠正我,如果我错了)。但我怎么去实际删除这些?我试图创造出一个变量(即

var query = db.collection.distinct("delete") 

),然后执行

db.collection.remove(query) 

但记录仍然存在?任何帮助将是伟大的!

+0

删除任何字段?你想要什么语言在shell中? – Drew 2013-05-04 19:06:43

回答

2

假设你正在试图删除包含一个delete领域的所有文档的每个文档:

db.collection.remove({delete: {$exists: true}}); 
+0

啊,好的。这是完成同样事情的更简洁的方法。谢谢! – hayleyelisa 2013-05-04 19:19:47

1
var query = db.collection.distinct("delete") 
db.collection.remove({ delete : {$in : query} }) 

注意:它会删除其删除键

+0

这正是我所需要的。谢谢! – hayleyelisa 2013-05-04 19:12:08

+0

无法正常工作。嗯不适用于字段名称或值 – Drew 2013-05-04 19:14:30

0

如果你提供一些文档样本,你会得到的答案可以更具体和准确。

这里可能会出现混淆。你说'包含单词删除'的文件'。问题是“删除”一词出现在哪个字段?

您发出的distinct()命令向您返回来自名为“delete”的字段的不同值,而不是某些字段值中出现单词“delete”的文档的ID。

举例来说,如果你有一个记录

{_id:1, x:"delete"} 
{_id:2,delete:true} 
{_id:3,delete:null} 
{_id:4,delete:false} 
{_id:5, x:"leave alone"} 

你会删除第一个文件与

db.foo.remove({x:"delete"}) 

你会删除第二个纪录

db.foo.remove({delete:true}) 

应删除记录2,3,4与

db.foo.remove({delete:{$exists:true}}) 

没有必要先查询所有记录到shell中,然后从它们组成一个查询。您可以将条件直接指定给remove命令。