mongodb - 如何在 Mongo 中合并列

标签 mongodb aggregation-framework pipeline mongoose-populate

我遇到了这个问题,但似乎无法解决。

我的数据示例:

[
{'item': 'U',
'field_1': 3,
'field_2': 1,
'field_3': 1,
'field_4': 2,
'field_5': 5,
   :
   :
   :
},
{'item': 'Y',
'field_1': 9,
'field_2': 2,
'field_3': 3,
'field_4': 5,
'field_5': 1,
   :
   :
   :
}
]

我想创建一个名为 REST 的新字段,它将是不在我的输入数组中的字段的总和 ([field_1, field_5])。

我想要的结果是这样的(对于输入[field_1, field_5]):

[
{'item': 'U',
'REST': 13,
},
{'item': 'Y',
'REST': 20
}
]

请Mongo高手帮忙!,深表感谢。谢谢!

最佳答案

您可以使用$objectToArray$filter实现这一目标:

db.collection.aggregate([
    {
        $addFields: {
            rootAsArray: {
                $filter: {
                    input: {$objectToArray: "$$ROOT"},
                    as: "field",
                    cond: {
                        $and: [
                            {$ne: ["$$field.k", "_id"]},
                            {$ne: ["$$field.k", "item"]},
                            ...any other field that's not relevant, you can also just add these to input arr ...

                            {$not: {$setIsSubset: [["$$field.k"], ["field_1", "field_5"]]}}
                        ]
                    }
                }
            }
        }
    },
    {
        $project: {
            item: "$item",
            OTHER: {
                $sum: {
                    $map: {
                        input: "$rootAsArray",
                        as: "value",
                        in: "$$value.v"
                    }
                }
            }
        }
    }
]);

关于mongodb - 如何在 Mongo 中合并列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62128612/

相关文章:

node.js - NodeJS native 驱动程序上的示例 MongoDB 错误是什么样的?

MongoDb 比较 2 个字段的查询条件

javascript - 如何在 mongoose/node.js 的聚合查询中使用变量

mongodb - 如何在 MongoDB 中获取以字段开头字母(A 到 Z)的随机文档?

python - MongoDB:如何查找聊天室有电话号码的消息?

java - MongoDb 使用聚合查询 Java 代码

python - 为什么在 scikit-learn 中使用 make_pipeline 时出现 'last step of pipeline' 错误?

python - 如何在Snakemake中引用anaconda环境中的可执行文件

mongodb - 蒙戈数据库 : How to get original Document after aggregation stage $group?

gitlab-ci - Gitlab 仅在上一个作业运行时运行管道作业