我有一个 MongoDB 集合,其中包含以下格式的文档:
{
"_id" : ObjectId("4e8ae86d08101908e1000001"),
"name" : ["Name"],
"zipcode" : ["2223"]
}
{
"_id" : ObjectId("4e8ae86d08101908e1000002"),
"name" : ["Another ", "Name"],
"zipcode" : ["2224"]
}
我目前可以获得匹配特定数组大小的文档:
db.accommodations.find({ name : { $size : 2 }})
这会正确返回 name
数组中包含 2 个元素的文档。但是,我无法执行 $gt
命令来返回所有 name
字段的数组大小大于 2 的文档:
db.accommodations.find({ name : { $size: { $gt : 1 } }})
如何选择所有具有大于 1 的 name
数组的文档(最好无需修改当前数据结构)?
最佳答案
在 MongoDB 2.2+ 中有一种更有效的方法来执行此操作,现在您可以在查询对象键中使用数字数组索引(基于 0)。
// Find all docs that have at least two name array elements.
db.accommodations.find({'name.1': {$exists: true}})
您可以使用使用部分过滤器表达式的索引支持此查询(需要 3.2+):
// index for at least two name array elements
db.accommodations.createIndex(
{'name.1': 1},
{partialFilterExpression: {'name.1': {$exists: true}}}
);
关于mongodb - 查询数组大小大于 1 的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53666799/