Javascript 如果存在与MongoDB匹配的其他文档,则添加字段&;猫鼬

Javascript 如果存在与MongoDB匹配的其他文档,则添加字段&;猫鼬,javascript,mongodb,mongoose,Javascript,Mongodb,Mongoose,我的数据库中有一组帖子,包含以下基本信息: Posts = { _id: '', title '', desc '', ... } 我还有一个Likes收藏like(创建或删除用户喜欢的文档): 目标是,当我得到一个帖子列表时,添加一个喜欢的字段,如果文档喜欢的匹配与否,该字段将显示真/假,以及喜欢的集合(我知道如何)中的匹配数,如: 我已经使用了$lookup&$addFields,但到目前为止只能使用一个值进行联接。在我的例子中,我需要一个特定的文档,并通过两个字段(用户

我的数据库中有一组帖子,包含以下基本信息:

Posts = {
   _id: '',
   title '',
   desc '',
...
}
我还有一个Likes收藏like(创建或删除用户喜欢的文档):

目标是,当我得到一个帖子列表时,添加一个喜欢的字段,如果文档喜欢的匹配与否,该字段将显示真/假,以及喜欢的集合(我知道如何)中的匹配数,如:

我已经使用了
$lookup
&
$addFields
,但到目前为止只能使用一个值进行联接。在我的例子中,我需要一个特定的文档,并通过两个字段(用户id、发布id)进行过滤

到目前为止,我得到的是:

    const posts = await posts.aggregate
    ([
      {
        $lookup: {
          from: 'likes',
          localField: '_id',
          foreignField: 'post_id',
          as: 'likes'
        }
      },
      { $match: {
        user_id: mongoose.Types.ObjectId(req.params.id),
      } },
      {
        $addFields: {
          likes: 
            { $size: "$likes" } // here nb of likes
        }
      }
    ])
试试这个

db.getCollection('post').aggregate([
  {
    $lookup: {
      from: 'likes',
      localField: '_id',
      foreignField: 'post_id',
      as: 'likes'
    }
  },
  {
      $addFields:{
          size:{$size:"$likes"},
          liked: 
          {$size: {
                        $filter: {
                            input: "$likes",
                            as: "item",
                            cond: { $eq: [ "$$item.user_id", ObjectId("5f2a38ad61a591cf96d58f6a") ] }
                        }
                }
             }
          }
  },
  {
  $addFields:{
      liked:{
          $cond:[{$eq:["$liked",0]},false,true]
          }
      }    
  }
])
    const posts = await posts.aggregate
    ([
      {
        $lookup: {
          from: 'likes',
          localField: '_id',
          foreignField: 'post_id',
          as: 'likes'
        }
      },
      { $match: {
        user_id: mongoose.Types.ObjectId(req.params.id),
      } },
      {
        $addFields: {
          likes: 
            { $size: "$likes" } // here nb of likes
        }
      }
    ])
db.getCollection('post').aggregate([
  {
    $lookup: {
      from: 'likes',
      localField: '_id',
      foreignField: 'post_id',
      as: 'likes'
    }
  },
  {
      $addFields:{
          size:{$size:"$likes"},
          liked: 
          {$size: {
                        $filter: {
                            input: "$likes",
                            as: "item",
                            cond: { $eq: [ "$$item.user_id", ObjectId("5f2a38ad61a591cf96d58f6a") ] }
                        }
                }
             }
          }
  },
  {
  $addFields:{
      liked:{
          $cond:[{$eq:["$liked",0]},false,true]
          }
      }    
  }
])