【问题标题】:MondoDB aggregation - remapping inner documentsMongoDB 聚合 - 重新映射内部文档
【发布时间】:2021-03-27 23:28:08
【问题描述】:

如何在以下示例中重新映射内部文档:

db.customers.aggregate(
[
    {
        $project: {
            "_id": 0,
            "First Name": "customerDetails.firstName",
            "Last Name": "customerDetails.lastName",
            "Full Name": { $concat : [ "customerDetails.firstName", " ", "customerDetails.lastName" ] }
        }
    }
]

)

像这样 "$customer.firstName" 放置 $ 不起作用,而不是取内部字段 firstName 的值,基本上它不会返回任何内容.

customer集合的结构示例:

{
    "_id" : ObjectId("5fb3c41454742e0d3c9f7605"),
    "customerDetails" : {
        "firstName" : "Robert",
        "lastName" : "Green",
        "phoneNumber" : "0878712375",
        "email" : "robert.green@gmail.com"
    }
}

预期结果:

{
    "First Name": "Robert",
    "Last Name": "Green",
    "Full Name": "Robert Green"
}

实际结果:

{
    "First Name": "customerDetails.firstName",
    "Last Name": "customerDetails.lastName",
    "Full Name": "customerDetails.firstName customerDetails.lastName"
}

【问题讨论】:

  • 如果你能提供你的文件样本以及当前和预期的输出将会很棒:)
  • “不起作用”是什么意思?
  • 如果字段被称为customer**Details**当然$customer.firstName不起作用

标签: mongodb aggregate remap


【解决方案1】:

使用$ 引用字段,应该可以:

db.customers.aggregate(
[
    {
        $project: {
            "_id": 0,
            "First Name": "$customerDetails.firstName",
            "Last Name": "$customerDetails.lastName",
            "Full Name": { $concat : [ "$customerDetails.firstName", " ", "$customerDetails.lastName" ] }
        }
    }
]

【讨论】:

  • 再一次,“不会工作”是什么意思?
  • 对不起 - 我的错误。这是工作。我正在查看这些字段不存在的记录,并且错误地认为它不起作用。如果他们不在场,失踪是很正常的。
猜你喜欢
  • 2020-09-05
  • 1970-01-01
  • 2020-08-09
  • 2016-12-19
  • 2021-09-14
  • 2017-03-18
  • 1970-01-01
  • 2015-07-05
  • 2013-09-18
相关资源
最近更新 更多