使用聚合函数引用多个字段

时间:2016-12-21 12:02:46

标签: mongodb mongodb-query aggregation-framework

假设我有一些mongo数据库查询,它返回以下两个文档。 (我正在使用聚合和放大,它返回给我这个结果集)。

s.next().toLowerCase().equals("y")

我的数据库架构较少&我正在存储属性和值。有多个属性代表相同的信息。对于例如在这里“名字”& “employeename”代表同样的事情。我想要一些常见属性的最终输出(比如“员工姓名”)。此公共属性可以具有“name”或“employeename”的值。

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

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

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

最终输出应为

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

有人可以告诉我如何编写这个mongo DB命令吗?

1 个答案:

答案 0 :(得分:2)

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

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