У меня есть документ коллекции, в котором говорится test:
{id: 123,
lId: abc,
cnum: [{num: 112, type:R}]
},
{id: 234,
lId: abc,
cnum:[{ num: 112, type: R}]
},
{id: 345,
lId: cbd,
cnum: [{num: 112, type: R}]
},
{id: 456,
lId: efg,
cnum: [{num: 121, type:R}]
}
Я хочу, чтобы запрос возвращал значения с повторяющимся значением cnum num, но с уникальным lId. То есть он должен возвращать
id: 123,lId: abc, cnum.num: 112, id: 345,lId: cbd, cnum.num: 112
, но в настоящее время он возвращает
id: 123,lId: abc,cnum.num: 112, id: 234, lId: abc, cnum.num: 112, id: 345,lId: cbd, cnum.num: 112
Мой текущий скрипт также возвращает повторяющийся lId. Вот мой сценарий:
var groupCnum = db.getCollection('test').aggregate([
{ $match: {"cnum.0": {$exists: true}}},
{ $unwind: "$cnum" },
{ $match: { "cnum.type": "R" } },
{ $group: { "_id": "$cnum.num", "count": { $sum: 1 } } },
{ $match: {"count": {"$gt": 1} } }
], {allowDiskUse: true}).map(record => record._id);
var duplicatedCnum = db.getCollection('test').aggregate([
{ $match: {"lId": {$nin: groupCnum}}},
{ $match: { "cnum.num": {$in: groupCnum} } },
{ $unwind: "$cnum" },
{ $match: { "cnum.type": "R" } },
{ $sort: {cnum: 1} },
{ $limit: 100}
], {allowDiskUse: true});
var fieldNames = ["id", "lId", "cnum.num"];
print(fieldNames.join(","));
Кто-нибудь может подсказать, что мне не хватает?