Mongo聚合基于其他人创建自定义字段

时间:2016-06-22 19:39:04

标签: mongodb aggregation-framework

我的订单文档看起来像这样(这是一个伪集合,但我认为它应该足够说明):

{ 
  _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这样做会很好。

0 个答案:

没有答案