【问题标题】:Add field if another document matching exist with MongoDB & Mongoose如果存在与 MongoDB 和 Mongoose 匹配的另一个文档,则添加字段
【发布时间】:2020-08-05 19:47:28
【问题描述】:

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

Posts = {
   _id: '',
   title '',
   desc '',
...
}

我也有一个 集合,例如(创建或删除用户喜欢帖子的文档):

Likes = {
_id: '',
user_id: '',
post_id: '',
}

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

Posts = [{
   _id: '',
   title '',
   desc '',
   liked: true,
   likes: 5,
...
}, ...]

我使用过$lookup$addFields,但目前只能加入一个值。就我而言,我想要 一个 特定文档并按 2 个字段(user_id、post_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
        }
      }
    ])

【问题讨论】:

    标签: javascript mongodb mongoose


    【解决方案1】:

    试试这个

    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]
              }
          }    
      }
    ])
    

    【讨论】:

      猜你喜欢
      • 2020-02-23
      • 1970-01-01
      • 2021-04-11
      • 2021-11-27
      • 1970-01-01
      • 2015-07-28
      • 2014-07-20
      • 2021-04-24
      • 1970-01-01
      相关资源
      最近更新 更多