如何在MongoDB中删除集合中除一个文档以外的所有文档

26

有没有一种方法可以根据条件从集合中删除除一个文档以外的所有文档。

我正在使用MongoDB版本2.4.9


2
你应该给我们提供一个你的文档的例子。也许更快的方法是保存文档,删除集合并将保存的文档重新插入。 - kranteg
1
使用不等于条件删除文档: db.inventory.remove( { qty: { $ne: 20 } } ) 这将删除除了qty=20之外的所有文档。 - GaneshP
4个回答

62

您可以按照以下方式进行操作:

db.inventory.remove( { type : "food" } )

上述查询将删除类型等于 "food" 的文档。

要删除不符合条件的文档,可以执行以下操作:

db.inventory.remove( { type : { $ne: "food" } } )
db.inventory.remove( { type : { $nin: ["Apple", "Mango"] } } )

点击这里了解更多信息。


更新版本:db.getCollection("COLLECTION_NAME").deleteMany( { "COLUMN_NAME" : { $nin: ["VALUE1", "VALUE2", "VALUE3"] } } ) - Paul Marcelin Bejan

7
为了仅保留一个文档,我们可以使用查询运算符$nin(不在...之内)应用到一个包含与我们想要保留的文档相关值的指定数组上。
db.collections.remove({"field_name":{$nin:["valueX"]}})
$nin数组的优点在于我们可以使用它来删除除一个或两个甚至许多其他文档之外的所有文档。

要删除除两个文档之外的所有文档:

db.collections.remove({"field_name":{$nin:["valueX", "valueY"]}})

删除除三个之外的所有文档:

db.collections.remove({"field_name":{$nin:["valueX", "valueY", "valueZ"]}})

4

查询

db.collection.remove({ "fieldName" : { $ne : "value"}})

0
如Taha EL BOUFFI所述,以下方法适用于我。
db.collection.remove({"fieldName" : { $nin: ["value"]}});

此回答并未解决问题。当您拥有足够的声望时,您将能够评论任何帖子; 取而代之的是,提供不需要要求者澄清的答案。-来自审查 - mnikley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接