我想合并几个文档。大多数字段具有相同的值,但可能有一两个字段具有不同的值。这些字段事先是未知的。理想情况下,我想合并所有文档,使字段保持不变,但只为那些具有某些变化的字段创建一个值数组。
对于我的第一种方法,我按文档的公共字段进行分组,并保留第一个文档,但这会丢弃其他字段中的一些信息。
group_documents = {
"$group": {
"_id": "$0020000E.Value",
"doc": {
"$first": "$$ROOT"
}
}
}
merge_documents = {
"$replaceRoot": {
"newRoot": "$doc"
}
}
write_collection = { "$out": { "db": "database", "coll": "records_nd" } }
objects = coll.aggregate(pipeline)
如果已知字段具有不同的值,我会执行类似的操作,
merge_sol1或merge_sol2或merge_sol3
第三个解决方案实际上非常接近我想要的输出,我可以稍微调整一下,但是这些答案假设了要合并的字段的先验知识。
1条答案
按热度按时间qmb5sa221#
可以先将所有字段按
$addToSet
进行$group
运算,先将所有不同的值放入一个数组中,然后检查结果数组的大小,如果数组大小为1(即该字段中所有单据的值都相同),则有条件地挑第一项;否则,保留结果数组。Mongo Playground