mongodb - 查询数组大小大于 1 的文档

我有一个 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 } }})

如何选择所有 name 数组大小大于 1 的文档(最好无需修改当前数据结构)?

最佳答案

现在您可以在查询对象键中使用数字数组索引(基于 0),在 MongoDB 2.2+ 中有一种更有效的方法。

// 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}}}
);

https://stackoverflow.com/questions/7811163/

相关文章:

database - MongoDB 或 CouchDB - 适合生产?

mongodb - 默认在 MongoDB shell 中打印漂亮

mongodb - 如何获取mongodb中的最后N条记录?

mongodb - 删除 MongoDB 数据库中的所有内容

macos - Mongod 提示没有/data/db 文件夹

mongodb - 查找数组字段不为空的 MongoDB 记录

mongodb - 查找包含特定值的数组的文档

mysql - 何时使用 MongoDB 或其他面向文档的数据库系统?

architecture - 何时使用 Redis?何时使用 MongoDB?

mongodb - 如何重命名 MongoDB 数据库?