Найди в двух массивах и покажи найденный - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть такие документы:

{
    up: [],
    down: []
}

up и down содержат идентификаторы пользователей, которые являются уникальными и могут быть только в одном из массивов.

Можно ли найти идентификатор в массивах и вернуть, в каком из них был найден идентификатор?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Вы можете запустить следующий конвейер агрегации:

db.collection.aggregate({
    $project: {
        "foundIn": {
            $cond: [
                // if the filtered "up" array does not equal an empty array []
                { $in: [ userId, "$up" ] },
                // then return "up"
                "up",
                {
                    // otherwise we apply the same logic for "down"
                    $cond: [
                        { $in: [ userId, "$down" ] },
                        "down",
                        // fall back to "nowhere" result if the searched value is not contained in either array
                        "nowhere"
                    ]
                }
            ]
        }
    }
})
0 голосов
/ 17 сентября 2018

Вы можете достичь следующим образом:

db.collection.find().forEach(function(doc){
     var num=2; 
     if(doc.up.indexOf(num)>-1) 
         print("found in up"); 
     else if(doc.down.indexOf(num)>-1) 
         print("found in down"); 
     else 
         print("not found") 
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...