如何在$ 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) { .. }