如何合并MongoDB中的对象
Posted
技术标签:
【中文标题】如何合并MongoDB中的对象【英文标题】:how to merge the objects in MongoDB 【发布时间】:2021-11-13 22:46:15 【问题描述】:解释:合并对象,t_f
和t_t
成为key,v
成为value。在t_f_t
对象中。之后t_f_t
文档将合并到data
。检查预期的输出。
"data":
"2011-08-31T05:33:02Z": 1,
"2011-09-01T12:58:33Z": 1,
,
"t_f_t":
"t_f": "2010-07-25T22:07:00Z",
"t_t": "2020-10-06T21:07:00Z",
"v": 0
输出文档
"data":
"2010-07-25T22:07:00Z": 0,
"2011-08-31T05:33:02Z": 1,
"2011-09-01T12:58:33Z": 1,
"2020-10-06T21:07:00Z": 0,
,
【问题讨论】:
这是作业吗?到目前为止你尝试了什么?t_f
和 t_t
的键是否已修复?
感谢您的评论。是的,键 t_f
和 t_t
已修复。
【参考方案1】:
静态解决方案是这个:
db.collection.aggregate([
$set:
t: [
k: "$t_f_t.t_f", v: "$t_f_t.v" ,
k: "$t_f_t.t_t", v: "$t_f_t.v"
]
,
$set: t: $arrayToObject: "$t" ,
$project: data: $mergeObjects: ["$data", "$t"] ,
])
如果您需要更动态的,请使用
db.collection.aggregate([
$set: t: $objectToArray: "$t_f_t" ,
$set:
t:
$map:
input: "$t",
in:
$cond:
if: $ne: ["$$this.k", "v"] ,
then: k: "$$this.v", v: "$t_f_t.v" ,
else: null
,
$set: t: $filter: input: "$t", cond: "$$this" ,
$set: t: $arrayToObject: "$t" ,
$project: data: $mergeObjects: ["$data", "$t"] ,
])
【讨论】:
感谢它的工作,它解决了问题,但我不明白为什么排序不起作用,我尝试按时进行排序。但它没有排序。 对象中的字段没有任何顺序! 这点我明白了,下一步我已经给出了字段名。但仍然没有排序。 再次,您不能对对象中的字段进行排序。您必须转置为数组。以上是关于如何合并MongoDB中的对象的主要内容,如果未能解决你的问题,请参考以下文章