MongoDB中数组内的嵌入式文档的$ replaceRoot

时间:2018-02-15 02:45:58

标签: mongodb aggregation-framework

我是MongoDB的新手,我遇到了$replaceRoot(aggregation),我需要以我需要的方式输出文档。

文档架构

{
name: "Apple",
image: "",
is_fruit: true,
other: [
  {
    url: "",
    quotes: { // saved as ObjectId and is then lookedup or populated
    text: "An apple a day keeps the doctor away"
  }
}
]
}

通缉输出

{
  name: "Apple",
  image: "",
  is_fruit: true,
  other: [
    {
      text: "An apple a day keeps the doctor away"
    },
  ...
  ]
  }

即:将引号字段作为另一个数组的根,而不是整个文档的根。

谢谢。

2 个答案:

答案 0 :(得分:1)

嵌入式阵列没有$replaceRoot,但使用$map将数组转换为新格式可以达到类似的效果。

这样的东西
db.col.aggregate([
  {
    "$addFields": {
      "other": {
        "$map": {
          "input": "$other",
          "as": "res",
          "in": {
            "text": "$$res.text"
          }
        }
      }
    }
  }
])

您可以轻松地在客户端代码中执行类似操作。

答案 1 :(得分:0)

通过使用$ replaceRoot(aggregation),这里是输出。 附注:我使用的收藏名称是“ demoStack”,请用您的特定收藏替换它。

enter image description here

查询是:

db.demoStack.aggregate([
{ $replaceRoot: { newRoot: { $mergeObjects: [ 
    {name:"$name"},
    { image: "$image" },
    {is_fruit:"$is_fruit"},
    {other:"$other.quotes"}        
    ] } } } ])