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

时间:2017-03-20 14:22:32

标签: mongodb mongodb-query

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

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

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

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:3)

您可以使用以下聚合查询$project sizedata字段,并使用$mod函数保留包含奇数大小数组的文档。

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