我的订单文档看起来像这样(这是一个伪集合,但我认为它应该足够说明):
{
_id: ObjectID,
status: String
items: [{
product: ObjectID
}]
}
产品系列:
{
_id: ObjectID,
status: String
}
我正在使用聚合来获取订单摘要。
[{
$unwind: '$items'
}, {
$lookup: {
from: 'products',
localField: 'items.products',
foreignField: '_id',
as: 'product'
}
},
{$unwind:'$product'},
{
$group: {
_id: '$_id',
status: {
$first: '$status',
},
products: {
$addToSet: '$product.status'
}
}
}]
现在返回:
[ { _id: 57643e3a7d2dd411009e8869,
status: 'processed',
products: [ 'printing', 'done' ] }
]
然而,我的订单状态实际上源于其自身状态与其子产品的状态。
所以我希望状态是一个表达式的结果,该表达式考虑了产品数组,例如:
status = ~products.indexOf('printing') ? 'in print' : '$status'
我的设置更复杂,但基本上我需要查看产品状态,然后具有某种表示其状态的整体状态,或者如果某些条件不存在则默认为原始订单状态。
也许对于另一个问题,我也面临着并非所有项目都有相关产品的挑战(他们在办公室手动分配)所以我还需要检查我的项目数是否等于产品数量和影响那里的状态。呼。
我一直在寻找$ add和$ filter,但未能完成整个设置。我现在正在手动执行此操作,但让Mongo这样做会很好。