Различение недостающих документов в MongoDB find () - PullRequest
0 голосов
/ 28 апреля 2020

Когда я запускаю следующий запрос, я получаю документ, который соответствует нормальному состоянию, в данном случае это «LON».

Но есть ли способ, которым я могу заставить ответ отдельно возвращать значения, которые не были не найдено или найдено, что в данном случае означает «BUJ». Вместо запуска для l oop для отдельных значений.

ports = [
    "LON",
    "BUJ"
];

findDatas = async(coll, values, key) => {
    let datas = await coll.find({[key] : values});
    // let datas = await coll.find().where(key).in(values);
    console.log(datas)
}

findDatas(airportsModel, ports, "iata_code")

В моей БД у меня есть только "LON", что означает "BUJ" не найдено. Так есть ли способ сделать mon go, чтобы сказать, что данные значения не были найдены? вместе с найденными.

1 Ответ

0 голосов
/ 28 апреля 2020

Этот код динамически создает этап $match для поиска документов, использует $facet для разделения на 2 конвейера, первый возвращает документы, второй использует этап $group, созданный из входного массива, чтобы подсчитать, как много документов соответствуют каждому элементу. Результатом должен быть документ с 2 полями: documents и counts

matchdata={};
matchdata[key]={"$in":ports};
groupdata = {_id:null};
ports.forEach(function(p){
        groupdata[p] = {"$sum":{"$cond":[{"$eq":["$" + key, p ]},1,0]}}
});
db.coll.aggregate([
  {$match:matchdata},
  {$facet:{
     documents:[{$match:{}}],
     counts:[{$group: groupdata},{$project:{_id:0}}]
  }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...