如果MongoDB和Mongoose存在另一个匹配的文档,请添加字段

TANYERES亚历山大

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

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

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

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

而目标将是,当我得到的名单的帖子,增加一个字段喜欢谁表现出真/假如果文档就像匹配与否,也是比赛的数量集合(这个我知道如何)像:

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

试试这个

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

MongoDB Aggregate在文档中添加一个新字段(如果已存在另一个字段)

如果一个字段不存在,Mongodb将添加多个文档

mongodb聚合:如果两个字段的值匹配,则将相应字典的另一个字段的值添加到新字段

在每个文档中添加一个新字段,并在mongodb中为同一文档的另一个字段赋值

mongodb在从另一个字段派生的所有文档中添加字段

根据MongoDB文档中的另一个字段更新一个字段(在Node.js中使用Mongoose)

通过Mongoose在MongoDB中存储嵌入到另一个文档中的文档副本

如果发布字段为空,请运行另一个脚本

需要一个字段,如果另一个不存在

Mongoose:选择引用另一个文档的文档

如何将一个数组字段的长度添加到Mongodb文档中的另一个字段中

mongoose - 查询存在于另一个字段中的字段

如何在mongodb中的另一个文档中过滤文档的字段?

如何使用 nodejs 通过 objectId 和 mongodb 中的另一个字段查找文档?

如何使用MongoDB和C#使用另一个字段的值更新文档?

如果下一行与另一个模式不匹配,请删除与某个模式匹配的行

添加新字段,它是文档中另一个字段的大小

Mongoose Aggregate获取所有与一个条件匹配的文档,这些文档由一组与另一个条件匹配的文档引用

如果第一个字段与保存在不同文件中的另一个列表匹配,则提取行 -- shell 命令

SQL,如果另一个表中不存在该字段,则选择字段

Mongoose / MongoDB - 在另一个文档中按数组查询

给定另一个嵌套字段值和Mongoose,如何更新嵌套字段?

子文档数组上的 MongoDB 查询和投影也返回另一个文档的数组

mongoDB $ set问题,使用文档的键值/另一个字段值

聚合:将字段从另一个对象添加到mongo文档

MongoDB使用另一个字段的值添加新字段

mongodb聚合添加从另一个字段派生的字段

PostgreSQL-如果另一个表中存在字段值,则返回结果

如果该行的字段存在于另一个文件中,则删除该行