在MongoDB中,如何安全地删除包含空数组的文档?

时间:2015-04-12 15:04:11

标签: mongodb

如果有问题的财产是“网址”,我的直觉告诉我以下内容可行:

db.collection_123.remove({ "urls": [] });

我只是不测试它,如果它有一些意想不到的行为,比如删除urls值为数组的每个文档。

3 个答案:

答案 0 :(得分:4)

要安全地删除包含空数组的文档,请使用$exists的组合(如果运算符设置为true,则匹配包含url字段的文档,包括该字段的文档value为null)和$size运算符:

db.collection_123.remove({ url: { $exists: true, $size: 0 } });

答案 1 :(得分:3)

首先,您始终可以使用相应的find检查要删除的内容,该urls采用相同的查询。

现在你的问题。基本上,您正在查找阵列中至少没有一个条目的每个文档。数组中的第一个条目用它的索引表示,即0.因此文档的urls.0数组的第一个条目将是db.collection.find({ "urls.0": {$exists:false} }) 。而且你想要所有没有这个的文件。

首先,您可以通过发出以下内容来检查您的查询:

db.collection.remove({ "urls.0": {$exists:false} })

如果您发现结果实际上符合预期,则可以使用

删除文档
{{1}}

有关详细信息,请参阅dot notation

答案 2 :(得分:1)

这应该有效

db.collection_123.remove({ "urls.0": {$exists: false} });

这基本上检查索引0处是否存在值,从而确定数组是否为空。