填充将数据从一个集合减少到另一个集合Meteor Js

时间:2016-11-28 11:14:44

标签: javascript mongodb meteor

我有一点设计问题。

说我有两个系列:

Colletion A stores apples ( _id , appleName )

Collection B stores apple votes ( _id , apple_id , enum(0,1) )

然后我想基于apple_id返回集合A和集合B的缩减,以将0的值作为主对象的属性返回到1。 (比如得分)

示例数据:

collection一个数组

[{_id : 1, appleName : 'grannySmith'},{_id : 2, appleName : 'greenApple'},{_id : 3, appleName : 'anotherApple'}]

集合B数组

[{_id : 1, appleId : 1, vote : 0}, {_id : 2, appleId : 1, vote : 1}, {_id : 3, appleId : 1, vote : 1}]

从这个我正在寻找收集A以减少B

返回

collection一个带有reduce

的数组
[{_id : 1, appleName : 'grannySmith', score : 2},{_id : 2, appleName : 'greenApple'},{_id : 3, appleName : 'anotherApple'}]

现在看,它现在从带有链接ID的集合B的减少得分为2

1 个答案:

答案 0 :(得分:0)

您可以使用聚合来实现它:

db.apple.aggregate([
  {
    $lookup: {
      from: 'score',
      localField: '_id',
      foreignField: 'appleId',
      as: 'scores',
    },
  }, {
    $unwind: {
      path: '$scores',
      preserveNullAndEmptyArrays: true,
    },
  }, {
    $group: {
      _id: '$_id',
      appleName: {
        $first: '$appleName',
      },
      score: {
        $sum: '$scores.vote',
      }
    },
  }
])

注意:我在此聚合的第一阶段使用$lookup,您需要使用Mongo 3.2或更高版本才能使用它。