Mongodb-如果是引用的注释,则从注释文本中获取值

Mongodb-如果是引用的注释,则从注释文本中获取值,mongodb,Mongodb,我有一个mongo db评论集。如果一条评论被引用到另一条评论,我将更新被引用的评论的id 我有以下查询,如我创建的mongodb游乐场(下面的链接)中所示。在该示例中,comment333的引用字段值为1,这意味着它被引用到comment111 如果被引用,如何修改查询以包含被引用注释的“文本” 我要查找的结果是附加值“quotedText”:“content 111” 您只需为注释添加$lookup $match用键引用 $limit如果此id有多条注释,我不确定您是否可以管理 $pro

我有一个mongo db评论集。如果一条评论被引用到另一条评论,我将更新被引用的评论的id

我有以下查询,如我创建的mongodb游乐场(下面的链接)中所示。在该示例中,comment333的引用字段值为1,这意味着它被引用到comment111

如果被引用,如何修改查询以包含被引用注释的“文本”

我要查找的结果是附加值
“quotedText”:“content 111”


您只需为
注释添加
$lookup

  • $match
    键引用
  • $limit
    如果此id有多条注释,我不确定您是否可以管理
  • $project
    必填字段
  • $unwind
    quotedText
    因为它是一个数组,我们只需要
    text
    字段值
  • preserveNullAndEmptyArrays
    因为有可能
    quoted
    将为null,这将忽略空值
  • 现在我们在
    quotedText
  • $addFields
    用于将
    quotedText
    替换为
    text

游乐场:

你使用某种查询生成器还是逐行编写?不,我没有使用任何查询生成器,只是逐行编写,大部分使用mongodb参考站点,如果你知道语法,那么就不需要任何查询生成器。
{
  commentedBy: "userfooid",
  "key": 1,
  "text": "content 111",
  "quoted": null,
  
},
{
  commentedBy: "userfooid",
  "key": 2,
  "text": "content 222",
  "quoted": null,
  
},
{
  commentedBy: "userf333",
  "key": 3,
  "text": "content 333",
  "quoted": 1,
  
 {
    "_id": ObjectId("5a934e000102030405000002"),
    "commentedBy": "userf333",
    "key": 3,
    "quoted": 1,
    "text": "content 333"
    "quotedText": "content 111"

  }
 {
    $lookup: {
      from: "comments",
      let: { quoted: "$quoted" },
      pipeline: [
        {
          $match: {
            $expr: { $eq: ["$$quoted", "$key"] }
          }
        },
        { $limit: 1 },
        {
          $project: { _id: 0, text: 1 }
        }
      ],
      as: "quotedText"
    }
  },
  {
    $unwind: {
      path: "$quotedText",
      preserveNullAndEmptyArrays: true
    }
  },
  {
    $addFields: {
      quotedText: "$quotedText.text"
    }
  }