【问题标题】:How can I populate documents by a specific field inside lookup如何通过查找中的特定字段填充文档
【发布时间】:2021-10-03 07:04:10
【问题描述】:

我的user 文档如下所示,

{
  "_id": ObjectId("61408128f3c4b105c21c6e60"),
    "business_idea" : [
        {
            "business_tags" : [
                ObjectId("61408128f3c4b105c21c6e60")
            ],
            "isDefault" : true,
            "isDeleted" : false,
            "likedByList" : [
                ObjectId("615829aa55f3cc0a8c180a2b"), // _id Foreign key for likes
                ObjectId("615829aa55f3cc0a8c180a2c")
            ],
            "_id" : ObjectId("61556463aad46252d621b30d"),
            "business_id" : "61556463aad46252d621b30b",
            "business_name" : "ST Business",
            "business_name_to_lower" : "st business",
            "business_type" : "limited liability company",
            "business_desc" : "test brief description",
            "business_logo" : "https://neur-dev.s3.ap-south-1.amazonaws.com/logo/jainx%20logo1632986208841.png"
        }
    ]
}

likes 文档看起来像这样,

{
    "_id" : ObjectId("615829aa55f3cc0a8c180a2b"),
    "likedFlag" : true,
    "isDeleted" : false,
    "likeLocation" : "idea",
    "targetId" : ObjectId("61556463aad46252d621b30c"),
    "createdBy" : ObjectId("61456816b1f55166ab50d023"),
    "ideaId" : "61556463aad46252d621b30d",
    "createdAt" : ISODate("2021-10-02T15:13:06.255+05:30"),
    "updatedAt" : ISODate("2021-10-02T15:13:06.255+05:30"),
    "__v" : 0
}

现在我的问题是,我只想填充用户喜欢的对象,其中likes.createdBy 等于前端提供的_id

我正在使用以下查询,它返回给我所有与_id 匹配的喜欢的文档, 请在下面找到查询,

db.users.aggregate([
    {
    $lookup: {
      from: "universities",
      localField: "university",
      foreignField: "_id",
      as: "university",
    },
  },
  { $lookup: {
     from: "likes",
     localField: "business_idea.likedByList",
     foreignField: "_id",
     as: "liked"
  } },
  { $match: { "business_idea.isDeleted": false } },
  { $project: { ideaList: "$business_idea", university: "$university.type", likeditem: "$liked" } },
  { $unwind: "$ideaList" }
])

请帮助我仅填充此createdBy 字段与提供的_id 匹配的喜欢的文档。

请帮我解决这个问题。谢谢。

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    这是解决方案,它可能对某人有所帮助。

    db.users.aggregate([
       {
        $lookup: {
          from: "universities",
          localField: "university",
          foreignField: "_id",
          as: "university",
        },
      },
      { $lookup: {
         from: "likes",
         localField: "business_idea.likedByList",
         foreignField: "_id",
         as: "liked"
      } },
      { $match: { "business_idea.isDeleted": false } },
      { $project: { ideaList: "$business_idea", university: "$university.type", likeditem: {
            list: {$filter: {
                input: '$liked',
                as: 'item',
                cond: {$eq: ['$$item.createdBy', ObjectId('61456816b1f55166ab50d023')]}
            }}
        } } },
      { $unwind: "$ideaList" }
    ])
    

    【讨论】:

      猜你喜欢
      • 2022-12-10
      • 2019-07-17
      • 2021-05-22
      • 2017-08-23
      • 2021-11-18
      • 2015-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多