将数组转换为键作为MongoDB中的完整时间和值

Posted

技术标签:

【中文标题】将数组转换为键作为MongoDB中的完整时间和值【英文标题】:convert array into key as a complete time and value in MongoDB 【发布时间】:2021-08-09 23:09:16 【问题描述】:

说明:在b 中,我们有几个小时,必须完成时间并与日期连接。然后完成日期和时间成为关键。请查看预期输出


  "code": [
    
      "a": "2016-05-10",
      "b": 
        "12": 1,
        "00": 2,
        "06": 3
      
    ,
    
      "a": "2017-12-31",
      "b": 
        "12": 4,
        "00": 5,
        "06": 6
      
    
  ]

预期输出:


 "code": 
    "2016-05-10T12:00:00:0Z": 1,
    "2016-05-10T00:00:00:0Z": 2,
    "2016-05-10T06:00:00:0Z": 3,
    "2017-12-31T12:00:00:0Z": 4,
    "2017-12-31T00:00:00:0Z": 5,
    "2017-12-31T06:00:00:0Z": 6


【问题讨论】:

【参考方案1】: $concat 连接部分日期 $reduce 迭代代码数组的循环并在处理后的数组上连接
db.collection.aggregate([
  
    $set: 
      code: 
        $arrayToObject: 
          $reduce: 
            input: "$code",
            initialValue: [],
            in: 
              $concatArrays: [
                "$$value",
                
                  $map: 
                    input:  $objectToArray: "$$this.b" ,
                    as: "b",
                    in: 
                      k: 
                        $concat: ["$$this.a", "T", "$$b.k", ":00:00:0Z"]
                      ,
                      v: "$$b.v"
                    
                  
                
              ]
            
          
        
      
    
  
])

Playground

【讨论】:

谢谢.. 不知何故它工作,但收到错误消息'错误解析日期字符串'2016-05-10T00:00:00.000Z'; 19: 在服务器上找不到格式文字'.''。 我不确定,但是将日期设置为键名不是一个好主意,因为键名有一些限制,在某些情况下它不允许点. 感谢您的评论,预期的密钥以0Z结尾,我们可以格式化吗? it 和 PlaygroundOutput 键以 000Z 结尾 它是毫秒的时区,所以它被日期类型隐藏ISODate("2016-05-10T12:00:00Z") 但是每当我们将它转​​换为字符串时,它都会返回"2016-05-10T12:00:00.000Z".. 我已经用新方法更新了答案,希望它能奏效..

以上是关于将数组转换为键作为MongoDB中的完整时间和值的主要内容,如果未能解决你的问题,请参考以下文章

R 和 MongoDB:数组存储为以索引为键的对象

将对象数组转换为包含键和值的对象作为对象数组

将字符串数组转换为键值对

在 C# 中将匿名类型转换为键/值数组?

如何解压缩数据框列中存在的 json 的键,值将转换为键作为列,而使用 python 将其值转换为列?

NSMutableDictionary 正在为键和值添加引号 - 为啥?