$ nin mongodb не дает мне ожидаемых результатов - PullRequest
0 голосов
/ 26 апреля 2018

Я выполняю запрос к некоторым данным в коллекции появлений, которая выглядит следующим образом.

[
{
    "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}
});

Я действительно близок, есть идеи, почему у меня не работает нин?

1 Ответ

0 голосов
/ 27 апреля 2018

Ну, я исправил это сам после проб и ошибок. Оказывается, в агрегатной функции mongodb у вас должен быть $ match до $ group, у меня это было наоборот. Я оставлю это здесь на случай, если это поможет кому-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...