我在MongoDB视图中使用$ facet运算符对同一数据运行两个管道。在最后阶段,我需要将这两个合并在一起。如果我们运行的是Mongo 3.6,我将使用$ mergeObjects运算符执行此操作。但是,我们正在运行版本3.2,其中$ mergeObjects不可用。所以我试图弄清楚3.2的等效值是什么:

{
  $replaceRoot: {
    newRoot: {
      $mergeObjects: ["$pipelineResults", {
        totalCount: "$totalCount.value"
      }]
    }
  }
}


我试过使用$ project,像这样:

{
  newRoot: {
    $project: {
      "$pipelineResults": 1,
      totalCount: {
        "$totalCount.value": 1
      }
    }
  }
}


...但这是行不通的。也许我需要$ group和$ project的组合? 3.2中会是什么样?

最佳答案

如果您有3.2,则也不能使用$mergeObjects(自3.6起可用)。实际上,这两个运算符只是一种方便的投影方式,因此您可以用$project替换它们,但缺点是必须指定所有对象属性,例如:

{
    $project: {
        fieldOne: "$pipelineResults.fieldOne",
        fieldTwo: "$pipelineResults.fieldTwo",
        //...
        totalCount: "$totalCount.value"
    }
}

关于javascript - MongoDB 3.2等同于$ mergeObjects阶段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51043910/

10-12 12:27