首页 > 解决方案 > Mongo 聚合 - 遍历文档中的多个对象并仅返回键:值

问题描述

考虑下一个文档:

_id:ObjectId("6085c476e5989552b4bf18fb")
employeeName: {needDisasseble: false, mark: false, value: "Bobi brown"},
employeeNumber: {needDisasseble: false, mark: false, value: "12556"},
employerName: {needDisasseble: false, mark: false, value: "Intel"},
child1Name: {needDisasseble: false, mark: false, value: "Jhon hopkins"},
child2Name: {needDisasseble: false, mark: false, value: "Donna dick"},

我正在尝试实现两件事:

  1. 遍历所有对象并返回 objectKey:objectkey.value => employeeName: "Bobi brown";
  2. 我想丢弃所有键名中不包含“child”的对象。

我知道如何在纯 JS 中做到这一点,但是如何使用聚合管道实现相同的结果?

标签: mongodbmongoosemongodb-query

解决方案


如果它将来可以帮助任何人:

    db.element.aggregate([
         {"$project":{_id:0,"arrayofkeyvalue":{"$objectToArray":"$$ROOT"}}}, 
         { $match : { "arrayofkeyvalue.k" : /^child/ } }, 
         { $project : 
            { _id :1,
              "arrayofkeyvalue": { 
                  "$arrayToObject": {
                        "$map": {
                            "input": "$arrayofkeyvalue", 
                            "as": "el", 
                            "in": { 
                                "k": "$$el.k", 
                                "v": {
                                     $cond : {
                                         if :{
                                              $eq :["$$el.v.value",undefined] 
                                            },
                                        then: "$$el.v",
                                        else: "$$el.v.value"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            },
            { "$replaceRoot": { "newRoot": "$arrayofkeyvalue" }  },

        ]
    )

推荐阅读