我在聚合管道阶段列出了一些文档,如下所示:

[{
   obj1:{code:"123"},
   obj2:{code:"654"},
   obj3:{code:"abc"},
   obj4:{code:"xyz"},
   type:"obj1",
},{
   obj1:{code:"123"},
   obj2:{code:"654"},
   obj3:{code:"abc"},
   obj4:{code:"xyz"},
   type:"obj2",
},{
   obj1:{code:"123"},
   obj2:{code:"654"},
   obj3:{code:"abc"},
   obj4:{code:"xyz"},
   type:"obj4",
}]

在相同的聚合管道中,如果不使用$Switch用例,我们是否有可能在每个对象中为其在$project阶段的相应类型值投影代码字段?

结果应该是:

[{
    obj1:{code:"123"},
    obj2:{code:"654"},
    obj3:{code:"abc"},
    obj4:{code:"xyz"},
    type:"obj1",
    code:$type.code // should return "123"
},{
    obj1:{code:"123"},
    obj2:{code:"654"},
    obj3:{code:"abc"},
    obj4:{code:"xyz"},
    type:"obj2",
    code:$type.code // should return "654"
},{
    obj1:{code:"123"},
    obj2:{code:"654"},
    obj3:{code:"abc"},
    obj4:{code:"xyz"},
    type:"obj4",
    code:$type.code // should return "xyz"
}]

提前谢谢你.

推荐答案

您可以先使用$objectToArray来过滤您的$$ROOT个关键点,然后使用$filter来匹配type个字段.$let运算符允许您将其作为单级管道:

db.collection.aggregate({
    $addFields: {
        code: {
            $let: {
                vars: { 
                    match: { 
                        $first: { 
                            $filter: { 
                                input: { $objectToArray: "$$ROOT" }, 
                                cond: { $eq: [ "$type", "$$this.k" ] } 
                            } 
                        } 
                    } 
                },
                in: "$$match.v.code"
            }
        }
    }
})

Mongo Playground

Mongodb相关问答推荐

基于另一子文档更改子文档的引用

如何从MongoDB集合中获取第一个和最后一个元素?

如何在MongoDB中正确解析佛年?

如何填充Mongoose中的嵌套引用

MongoDB 按 created_at 月聚合

Mongo:查找具有 0 个关联文档的文档,成本更低

查询有关 Go 项目中对象数组的 MongoDb 集合

Java MongoDB FindOne 获取最后插入的记录

mongodb - 查找具有最接近整数值的文档

如何在我的Meteor 应用程序数据库中使用 mongoimport?

适用于 Windows 10 64 位的 MongoDB 下载

请按语法排序 Mongoid Scope

从 id 删除 PyMongo 中的文档

判断 mongoDB 是否连接

Flask:设置应用程序和请求特定的属性?

MongoDB MapReduce - 发出一个键/一个值不调用reduce

show dbs 给出Not Authorized to execute command错误

我可以只获取 Cursor 对象(pymongo)中的第一项吗?

在mongoose中创建和查找地理位置

如何从集合中删除除 MongoDB 中的文档之外的所有文档