首页 > 解决方案 > 任何人都可以为我的场景生成 mongodb 查询吗

问题描述

我是 MongoDB 新手,我使用 Mongoose 管理进出 MongoDB 的数据。我有一个具有以下结构的集合:

var post= new Schema({
          message: String, 
          created_by_user_id: mongoose.Schema.Types.ObjectId,
          created_at: Date,
          likes: [new Schema({liked_by_user_id: mongoose.Schema.Types.ObjectId})]
});  

以下是带有虚拟文档的上述集合:

[{
   "_id": "5c0254c13a22f222ceb861ad",
   "message": "from pppr",
   "created_by_user_id": "5c0253e9a53bed2165c0625c",
   "likes": [
     {
       "_id": "5c027a6fff5fcb5ab180e20c",
       "liked_by_user_id": "5c0253e9a53bed2165c0625c"
     },
     {
       "_id": "5c028e46abc09775c10d767b",
       "liked_by_user_id": "5c0234c1d8832b6af3b4f4a6"
     }
   ],
   "created_at": "2018-12-01T09:30:41.943Z",
   "__v": 0
},
{
   "_id": "5c0254c13a22f222ceb861ad",
   "message": "from pppr",
   "created_by_user_id": "5c0253e9a53bed2165c0625c",
   "likes": [
      {
         "_id": "5c027a6fff5fcb5ab180e20c",
         "liked_by_user_id": "5c0253e9a53bed2165c0625c"
      },
      {
         "_id": "5c028e46abc09775c10d767b",
          "liked_by_user_id": "5c0234c1d8832b6af3b4f4a6"
      }
    ],
   "created_at": "2018-12-01T09:30:41.943Z",
   "__v": 0
}]  

现在,我正在尝试获取所有文件以及状态,这将表明我是否喜欢相应的帖子。应要求,我还发送了我的用户 ID。

基本上,在我的墙上,系统应该显示我或我的朋友创建的所有帖子以及每个文档中的额外状态,这将显示我是否喜欢相应的帖子。

我将用户朋友保存在名为“userfriends”的单独集合中。该集合的结构如下所示:

var userfriends = new Schema({
      user_id_1: mongoose.Schema.Types.ObjectId,
      user_id_2: mongoose.Schema.Types.ObjectId,
      created_at: Date
});  

我只想获取所有帖子以及那个额外的字段。因此,您可以忽略 userfriends 集合,这只是为了指导您。

谁可以帮我这个事?可以满足我要求的查询是什么?

提前致谢

标签: mongodbmongoosemongodb-queryaggregation-framework

解决方案


您可以$addFields$in聚合运算符一起使用

db.collection.aggregate([
  { "$addFields": { 
    "status": { "$in": [mongoose.Types.ObjectId(userId), "$likes.liked_by_user_id"] }
  }}
])

它将使用布尔值向您的每个帖子文档添加一个新字段


推荐阅读