当前位置: 首页 > 知识库问答 >
问题:

MongoDB聚合:获取引用的文档字段值

刁浩言
2023-03-14

我想从引用的文档中获取字段值。Mongodb版本是3.4。

假设我有两个收藏foo和bar。Foo提到bar:

{
  "_id" : ObjectId("5b6c713ea502dea387860eba"),
  "stack" : "overflow",
  "bar" : {
    "$ref" : "bar",
    "$id" : ObjectId("5b6c70e1a502dea387860ea6"),
    "$db" : "stackoverflow"
  }
}

相应的条形码文档看起来像这样:

{
  "_id" : ObjectId("5b6c70e1a502dea387860ea6"),
  "name" : "bar-2"
}

我尝试了以下聚合函数来归档此结果:

{
  "_id" : ObjectId("5b6c713ea502dea387860eba"),
  "stack" : "overflow",
  "barName" : "bar-2"
}

聚合功能:

db.getCollection('foo').aggregate([
  { $match: { _id: ObjectId("5b6c713ea502dea387860eba") }},
  {
    $lookup: {
        from: 'bar',
        localField: 'bar',
        foreignField: '_id',
        as: "bar"
      }
  },
  {
    $project: {
        _id: 1,
        stack: "$stack",
        barName: "$bar.name"
    }
  }

  ]).pretty()

但我的结果是这样的:

{
  "_id" : ObjectId("5b6c713ea502dea387860eba"),
  "stack" : "overflow",
  "barName" : []
}

我试着用谷歌搜索它,我查看了mongodb文档,但没有找到解决方案。

是我错过了什么还是这不可能?

谢谢

共有2个答案

谭彦
2023-03-14

因为我没有找到解决问题的方法,所以我找到了这个问题。这似乎是目前无法与mongodb DBRef()字段。

艾阳羽
2023-03-14

您需要$unwind,并且您的本地字段栏。id不仅仅是

db.getCollection('foo').aggregate([
  { "$match": { "_id": ObjectId("5b6c713ea502dea387860eba") }},
  { "$lookup": {
    "from": "bar",
    "localField": "bar.id",
    "foreignField": "_id",
    "as": "bar"
  }},
  { "$unwind": "$bar" },
  { "$project": {
    "_id": 1,
    "stack": "$stack",
    "barName": "$bar.name"
  }}
])
 类似资料:
  • 我有这个数据集: 我想用聚合来实现这种形式: 其中文档流组合成单个文档内的单个数组字段,我想在其中添加一些额外的字段。初始数据集在聚合管道中的第n个阶段后检索。 鉴于所有这些: 下一阶段应该是什么? 我需要$group吗? 我的下一阶段应该是什么样子?

  • 给定具有以下文档结构的MongoDB集合: 其中每个文档包含一个子文档数组,我希望将集合转换为以下结构的文档: 其中每个子文档现在是主文档中以子文档中的一个值命名的新字段的值(在该示例中,< code>animal字段的值用于创建新字段的名称,即< code>cat和< code>dog)。 我知道如何使用爪哇脚本片段进行。它很慢。我的问题是:如何使用聚合管道完成此操作?

  • 我很难相信这个问题还没有在某个地方被问到并回答过,但我找不到任何它的痕迹。

  • 本文向大家介绍如何获取 MongoDB 聚合中的子字符串,包括了如何获取 MongoDB 聚合中的子字符串的使用技巧和注意事项,需要的朋友参考一下 要获取子字符串,请在MongoDB中使用$substr。让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是在MongoDB聚合中获取子字符串的查询- 这将产生以下输出-

  • ES如何在内部实现度量聚合? 假设索引中的文档具有以下结构: 对于以下对类别进行术语聚合并计算总和(度量)的查询,“度量”字段值 从文档中提取(即\u源)并求和或 查询:

  • 我试图设置一个聊天应用程序,在其中你可以搜索随机的用户交谈。现在,firestore中的数据库结构如下: 集合“users”-文档“userid”-集合“conversations”-文档“conversationid”-字段“partner”,“lastmessage” 其次,我有一个集合“conversations”,其中包含对话中的所有消息。 我现在尝试做的是,当你按下一个按钮时,应用程序将