首页 文章

MongoDB查询 - 按奇数大小过滤数组

提问于
浏览
1

是否可以为具有奇数大小的数组而不是此数据的文档构建查询过滤器?

db.records.find({'$or': [{'my_array': {'$size': 1}},
                         {'my_array': {'$size': 3}},
                         {'my_array': {'$size': 5}},
                                     ...
                         {'my_array': {'$size': 15}}]}))

如果停在某个数字处,过滤器可能无法捕获所有项目 .

2 回答

  • 3

    您可以使用 $where 提供Javascript表达式来查询:

    db.records.find({ $where: "this.my_array.length % 2 == 1" })
    

    将为查询的其余部分匹配的每个文档处理JavaScript表达式,因此为了提高性能,您应该尝试并确保查询的其余部分是选择性的 .

  • 2

    您可以使用以下聚合查询 $project sizedata 字段,并使用 $mod 函数来保存具有奇数大小的文档 .

    db.records.aggregate(
      { $project: { size:{ $size: "$my_array" }, data:"$$ROOT"} },
      { $match: { size: { $mod: [ 2, 1 ] } } }
    )
    

相关问题