Я выполняю запрос к некоторым данным в коллекции появлений, которая выглядит следующим образом.
[
{
"yearID" : 1871,
"teamID" : "BS1",
"masterID" : "barnero01"
},
{
"yearID" : 1871,
"teamID" : "BS1",
"masterID" : "barrofr01"
},
{
"yearID" : 1871,
"teamID" : "BS1",
"masterID" : "birdsda01"
},
{
"yearID" : 1958,
"teamID" : "LAN",
"masterID" : "bessedo01"
},
{
"yearID" : 1955,
"teamID" : "BRO",
"masterID" : "bessedo01"
},
{
"yearID" : 2002,
"teamID" : "LAN",
"masterID" : "alvarvi01"
},
{
"yearID" : 1966,
"teamID" : "LAN",
"masterID" : "barbiji01"
}
]
(Есть 98000 записей) Я хочу получить отдельный список всех masterID всех игроков с teamID «LAN», но которые также никогда не ассоциировались с другим идентификатором teamID, кроме «LAN». Таким образом, он будет возвращать только последние две записи. Я думал о том, чтобы сделать совпадение и получить все masterID, где идентификатор команды не равен 'lan', а затем выполнить операцию $ nin, чтобы получить все записи, не входящие в этот набор. Затем я вернул бы masterID, как показано, и надеюсь получить результаты. Тем не менее, если я просто оставлю
{teamID:{$ne:'LAN'}
часть и возьмите $ nin, он возвращает те же результаты, которые говорят мне, что это не работает.
var nonLANPlayers = [];
db.appearances.find({teamID: {$ne:"LAN"}}).sort({masterID:1}).forEach(function(player){
nonLANPlayers.push(player.masterID);
});
db.appearances.aggregate(
{
$group: {_id:"$masterID"}
},
{
$match: {masterID:{$nin:nonLANPlayers}}
},{
$sort: {_id:1}
});
Я действительно близок, есть идеи, почему у меня не работает нин?