将数组转换为键作为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中的完整时间和值的主要内容,如果未能解决你的问题,请参考以下文章