【问题标题】:Reference multiple fields with aggregation function使用聚合函数引用多个字段
【发布时间】:2017-05-06 20:31:18
【问题描述】:

假设我有一些 mongo DB 查询,它返回以下两个文档。 (我正在使用聚合和投影返回这个结果集)。

{
    "name" : {
        "value" : "ANDERSON"
    },
    "ID" : {
        "value" : "2356"
    },
}

{
    "employeename" : {
        "value" : "DAVID"
    },
    "ID" : {
        "value" : "2356"
    },
}

我的数据库没有架构,我正在存储属性和值。有多个属性代表相同的信息。例如这里的 "name" & "employeename" 代表相同的东西。我想要一些通用属性的最终输出(比如“员工姓名”)。这个公共属性的值可以来自“name”或“employeename”。

我认为这个问题可以通过在聚合中再添加一个管道来解决。我试过 $or (它返回真/假而不是值)

db.getCollection('mycollection').aggregate([
    { "$project" : { 
        "name" : 1, 
        "ID" : 1, "employeename" : 1 
    }},
    { "$project":{
        "Employee Name": {$or : ["$name", "$employeename"]}
    }} 
])

最终输出应该是

{
    " Employee Name" : {
        "value" : "ANDERSON"
    },
    "ID" : {
        "value" : "2356"
    },
}

{
    " Employee Name" : {
        "value" : "DAVID"
    },
    "ID" : {
        "value" : "2356"
    },
}

谁能告诉我如何编写这个 mongo DB 命令?

【问题讨论】:

    标签: mongodb mongodb-query aggregation-framework


    【解决方案1】:

    您想要的是$ifNull 运算符,您还可以将您的管道缩短到一个$project 阶段。

    db.getCollection('mycollection').aggregate([
        { "$project" : { 
            "EmployeeName" : { "$ifNull": [ "$name",  "$employeename" ] },
            "ID" : 1,
        }}
    ])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-16
      • 1970-01-01
      • 2021-09-17
      • 2023-03-22
      • 1970-01-01
      • 2019-06-17
      • 2015-12-20
      • 2011-07-22
      相关资源
      最近更新 更多