2017-05-03 52 views
0

子文档领域给出一个文档这样比较两个MongoDB中

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

我想这个文件,因为items.qty < items.qtyMax其中一个子文档匹配。

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

+1

有没有太多的选择:$其中(https://docs.mongodb.com/manual/reference/operator/query/where/),[$ CMP(https://开头docs.mongodb.com/manual/reference/operator/aggregation/cmp/#_S_cmp),[map-reduce](https://docs.mongodb.com/manual/core/map-reduce/) –

回答

0

你有更好的办法来做到这一点,现在多亏了总管道,使您可以使用计算值:

db.yourDBNameHere.aggregate([ 
    { $project: 
     { isStock: 
      { $lt:["$items.qty", "$items.qtyMax"] } } }, 
    { $match: 
     { isStock: true, }}, 
]) 

这将使用“项目”阶段创建一个计算值,它检查是否或者商品数量少于商品最大数量,那么在“匹配”阶段中,只有符合条件的文档才是真实的。 isStock只是一个变量名称,可以用任何适合你的名称代替。

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