mongoose FindbyId和数组匹配的字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongoose FindbyId和数组匹配的字符串相关的知识,希望对你有一定的参考价值。

我想通过id查询用户,然后只带来匹配类型的食物,我该怎么做?

var type = 'fish';

var id = '597a348286ffe50d882a3033';

User.findById(id, { 'food.type': type }, 'food', function(err, model) {

    if (err) {

        console.log(err);

    }
    if (!model) {

        console.log('no model');
    }

    if (model) {

        console.log(model);

    }

});
答案

只需在获得用户后过滤食物。

User.findById(id, function (err, user) {
    if (err) {
        console.log(err);
    }
    if (!user) {
        console.log('no user');
    }
    if (user) {
        var food = user.food.filter(function (food) { return food.type === type; });
    }
});
另一答案

我会使用aggregate结合$filter

  User.aggregate([{
      $match: { '_id': ObjectId('597a348286ffe50d882a3033') }
  }, {
      $project:
      {
          food: {
              $filter: {
                  input: '$food',
                  as: 'food',
                  cond: {
                      $eq: ['$$food.type', type]
                  }
              }
          }
      }
  }])

这将首先选择与给定Id匹配的文档,然后返回给定类型的食物列表。

另一答案

你可以创建一个像这样的obj

var obj =
{
_id:'597a348286ffe50d882a3033',
'food.type' : 'fish'
}

然后将此函数作为过滤器传递

User.find(obj, function(err, model) {

    if (err) {

        console.log(err);

    }
    // find will return empty array and not null
    if (!model.length) {

        console.log('no model');
    }

    if (model) {

        console.log(model);

    }

});
另一答案

如果使用mongo _id字段查找对象,则在查询执行后不必使用其他过滤函数,而是直接在搜索查询中指定

Model.findOne({_id: '123jasdoisd123', 'food.type': type }, 
  function(err, food){
    if(err) return err;
    if(!food){
      // send the empty data
     return []
    }
    return food;
  }
)

以上是关于mongoose FindbyId和数组匹配的字符串的主要内容,如果未能解决你的问题,请参考以下文章

更新 findOne()/find()/findById() 返回的文档 - mongoose

更新 findOne()/find()/findById() 返回的文档 - mongoose

?????? Mongoose ???????(??:findById)

为啥 mongoose 的 deleteOne 和 findById 对已删除的 id 起作用

MongoDB 通过 Mongoose JS - findByID 是啥?

如何对对象node.js和mongoose进行排序