如何在$ group阶段将元素的位置推入数组中

时间:2017-10-01 16:54:01

标签: javascript mongodb

如何在$ group阶段将元素的位置推入数组?

在我的收藏中' xxx'我有文件:

[
  {
    login: login1,
    group: 1,
    a: 3,
    b: 1
  },
  {
    login: login2,
    group: 2,
    a: 2,
    b: 3
  },
  {
    login: login3,
    group: 1,
    a: 5,
    b: 3
  },
]

我的查询是这样的:

db.collection('xxx').aggregate( 
  [ 
    { $project: { login: 1, group: 1, sumAB: { $sum: [ '$a', '$b'] } } },
    { $sort: { group: 1, sumAB: -1 } },
    { $group: { _id: '$group', users: { $push: { login: '$login', positionInArray: here i want the index of pushed element in array 'users' } } } } },
    { $unwind: '$users' },
    { $match: { 'users.login': { $in: ['login1', 'login2'] } } } 
  ], function(err, result) { .. }

我希望能够访问result [0] .users.positionInArray和result [1] .users.positionInArray来比较哪一个更大。

编辑: 我找到了解决方案。它包含了阵列索引' $ unwind阶段的选项。

db.collection('gracze').aggregate(  [                                                                                                       
  { $project: { login: 1, group: 1, sumAB: { $sum: [ '$a', '$b'] } } },
  { $sort: { group: 1, sumaAB: -1 } },
  { $group: { _id: '$group', users: { $push: { login: '$login' } } } },
  { $unwind: { path: '$users', includeArrayIndex: 'positionInArray' } }, 
  { $match: { 'users.login': { $in: ['login1', 'login2'] } } } 
], function(err, result) { .. } 

0 个答案:

没有答案