如何合并MongoDB中的对象

Posted

技术标签:

【中文标题】如何合并MongoDB中的对象【英文标题】:how to merge the objects in MongoDB 【发布时间】:2021-11-13 22:46:15 【问题描述】:

解释:合并对象,t_ft_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_ft_t 的键是否已修复? 感谢您的评论。是的,键 t_ft_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中的对象的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB:将来自多个集合的数据合并为一个..如何?

将数组合并到对象到 MongoDB

如何组合 MongoDB 查找查询的输出?

在mongodb聚合中将多个对象合并为一个对象

MongoDB 将相关收集项计数与其他收集结果合并

如何使用 mongoose 更新 mongodb 中的对象?