Mongoose从传递的数组中找不到匹配的id

时间:2017-12-14 09:53:27

标签: node.js mongodb mongoose

我陷入了mongoose查询。我有一个id数组作为输入,我想在数据库中搜索该数组的id以匹配元素。在$in查询中使用find后,它会返回完美的结果。

现在,我想从数据库中找不到的数组中获取ID。最好的方法是什么?

请尝试发表评论。

   Template.find({
           _ids : [
             "as6d87as67da7s8d87a87",  // available in database
             "as6dasd8sa9d8a9a9s8d7",  // not-available in database
             "6756asd5as6dsadghasd3",  // available in database
          ]
   }, function(err, result){
         // Need result as "as6dasd8sa9d8a9a9s8d7", which is not matched. or in object.
         // Can we do with `aggregate` query?
   });

2 个答案:

答案 0 :(得分:1)

我认为这就是你想要的东西

   var _ids =  [
             "as6d87as67da7s8d87a87",
             "as6dasd8sa9d8a9a9s8d7",
             "6756asd5as6dsadghasd3"
          ];
   Template.find({
           _ids : _ids
   }, function(err, result){
         var filteredResult = _ids.filter(currentId => !result.some(item => item._id.toString() == currentId));
   });

答案 1 :(得分:0)

大卫的回答将起作用。这里的想法是将_ids数组与结果中的_ids进行比较,并返回缺少的数组。添加更多代码仅用于理解目的:

  1. 将结果的_id推送到新数组
  2. 比较_ids和新数组以返回缺少的元素

    var resIDs = new Array();
    for (var i = 0; i < result.length; i++) {
        resIDs.push(result[i]._id.toString());
    }
    var resultFiltered = 
        _ids.filter(function (v) {
            return !resIDs.includes(v.toString());
    })