mongodb - 嵌入数组中嵌入文档中的项目字段

标签 mongodb aggregation-framework

我有以下查询:

 cursor=self.postCol.aggregate([
      { "$graphLookup" : {
        "from": "pCol",
        "startWith": "$parent",
        "connectFromField": "parent",
        "connectToField": "_id",
        "as" : "parents"
        }
      },
      { "$project" : {
         "pValue": {
             "$cond": [
               { "$ne": [ "$pValue", [] ] },
               "$pValue",
               "$parents.0.pValue"
             ]
           }
         }
      }
    ])

因此给出以下记录:

{"_id": 4, parent: "", "pValue": ["d"], fieldA: 9},
{"_id": 5, parent: 4, "pValue": [], fieldA:2},
{"_id": 6, parent: 4,"pValue": [], fieldA: 9}

我应该得到:

{"_id": 4, "pValue": ["d"]}
{"_id": 5, "pValue": ["d"]}
{"_id": 6, "pValue": ["d"]}

相反,我得到:

{"_id": 4, "pValue": ["d"]}
{"_id": 5, "pValue": []}
{"_id": 6, "pValue": []}

由于某种我不明白的原因,$parents.0.pValue 没有返回正确的值。如何在父数组的第一个元素中选择 pValue 字段?

我想使用 {"$arrayElemAt": ["$parents",0]} 这将为我提供嵌入文档,但是我怎样才能从中获取要返回的字段?

最佳答案

您可以使用 $let 运算符将 else 条件替换为以下条件。

 {
    $let: {
        vars: {
            obj: {
                "$arrayElemAt": ["$parents", 0]
            }
        },
        in: "$$obj.pValue"
    }
 }

关于mongodb - 嵌入数组中嵌入文档中的项目字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41695271/

相关文章:

java - 带投影的聚合

mongodb - Meteor collection.update foreach 使用文档中的数据进行更新

mongodb - 获取给定用户每个对话的未读消息计数

mongodb - 将 $strLenCP 与 Spring Data MongoDB 结合使用

javascript - 在 async.waterfall 方法中构建 mongoose 回调。

mongodb - 如何获取聚合的前 n 个存储桶,以及将所有其他存储桶组合成 "other"存储桶?

Mongodb,$group 中项目的总数

javascript - 为什么 Mongoose 用 _id 替换对象中的键/值对?

node.js - 将 mongodb node.js 包与 mongodb 版本 2.4 一起使用

mongodb - $regex 与 $concat 在 MongoDB 的查询中