代码之家  ›  专栏  ›  技术社区  ›  Gunjan Patel

Mongoose从传递的数组中查找不匹配的ID

  •  2
  • Gunjan Patel  · 技术社区  · 7 年前

    我陷入了猫鼬式的查询。我有一个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 回复  |  直到 7 年前
        1
  •  1
  •   David Vicente    7 年前

    我想这就是你想要的

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

    大卫的回答会有用的。这里的想法是将\u ids数组与结果中的\u id进行比较,并返回缺少的id。添加更多代码只是为了理解:

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

      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());
      })