我有一个名为col
的mongoDB集合,其文档看起来像这样
{
{
intField:123,
strField:'hi',
arrField:[1,2,3]
},
{
intField:12,
strField:'hello',
arrField:[1,2,3,4]
},
{
intField:125,
strField:'hell',
arrField:[1]
}
}
现在我想从集合col
中删除数组字段size
小于2的文档。
所以我写了一个看起来像这样的查询
db.col.remove({'arrField':{"$size":{"$lt":2}}})
现在这个查询没有做任何事情。我检查db.col.find()
并返回所有文件。这个查询有什么问题?
答案 0 :(得分:6)
使用MongoDB 2.2+,您可以在条件对象键中使用数字索引来执行此操作:
db.col.remove({'arrField.2': {$exists: 0}})
这将删除arrField
中没有至少3个元素的任何文档。
答案 1 :(得分:5)
来自$size
的文档:
您不能使用$ size来查找一系列大小(例如:具有多于1个元素的数组)。
如果您想尝试这类事情,文档建议使用数组中的项目数来维护一个单独的大小字段(在本例中为arrFieldSize)。
答案 2 :(得分:4)
请注意,对于某些查询,仅使用(n)或条件列出您想要或排除的所有计数可能是可行的。
在您的示例中,以下查询将为所有包含少于2个数组条目的文档提供:
db.col.find({
"$or": [
{ "arrField": {"$exists" => false} },
{ "arrField": {"$size" => 1} },
{ "arrField": {"$size" => 0} }
]
})
答案 3 :(得分:0)
以下应该可以工作
db.col.remove({$where: "this.arrField.length < 2"})