鉴于此文件
{
_id: '123456',
items: [{
itemId: 'abcd',
qty: 1
qtyMax: 2
}, {
itemId: 'defg',
qty: 3,
qtyMax: 3
}]
}
我想在其中一个子文档中匹配此文档,因为items.qty < items.qtyMax
。
我知道$where
,但它不适用于此,因为它需要手动编写整个验证,检查items
并循环遍历所有元素...我希望一个更好的解决方案。
答案 0 :(得分:0)
由于允许您使用计算值的聚合管道,您现在有了更好的方法:
this
这将使用“项目”阶段来创建计算值,其中它检查项目数量是否小于项目最大值,然后在“匹配”阶段,仅匹配那些为真的文档。 db.yourDBNameHere.aggregate( [
{ $project:
{ isStock:
{ $lt:["$items.qty", "$items.qtyMax"] } } },
{ $match:
{ isStock: true, }},
])
只是一个变量名称,可以替换为适合您的名称。