比较MongoDB中的两个子文档字段

时间:2017-05-03 16:00:22

标签: javascript mongodb meteor

鉴于此文件

{
  _id: '123456',
  items: [{
    itemId: 'abcd',
    qty: 1
    qtyMax: 2
  }, {
    itemId: 'defg',
    qty: 3,
    qtyMax: 3
  }]
}

我想在其中一个子文档中匹配此文档,因为items.qty < items.qtyMax

我知道$where,但它不适用于此,因为它需要手动编写整个验证,检查items并循环遍历所有元素...我希望一个更好的解决方案。

1 个答案:

答案 0 :(得分:0)

由于允许您使用计算值的聚合管道,您现在有了更好的方法:

this

这将使用“项目”阶段来创建计算值,其中它检查项目数量是否小于项目最大值,然后在“匹配”阶段,仅匹配那些为真的文档。 db.yourDBNameHere.aggregate( [ { $project: { isStock: { $lt:["$items.qty", "$items.qtyMax"] } } }, { $match: { isStock: true, }}, ]) 只是一个变量名称,可以替换为适合您的名称。

https://docs.mongodb.com/manual/core/aggregation-pipeline/