gpt4 book ai didi

Mongodb - 根据其他字段值添加额外字段

转载 作者:可可西里 更新时间:2023-11-01 09:28:34 24 4
gpt4 key购买 nike

我在数据库中有以下格式的文档:

{
"_id" : ObjectId("5d6fb50852020c4a182fc773"),
"startTimestamp" : "1567601927157"
}

我想要实现的是,使用“startTimestamp”值,创建以下新字段:

  • 日期(格式为“04-09-2019”)
  • 小时(如“18”)
  • 月(如“9”)
  • 时间(如“18:28:47”)
  • weekDay(如“星期三”)

我能否得到一个查询以在所有文档中执行上述操作并最终以以下格式创建相应的文档:

{
"startTimestamp" : "1567601927157",
"date" : "04-09-2019",
"hour" : "18",
"month" : "9",
"time" : "18:28:47",
"weekDay" : "Wednesday",
}

编辑:
“startTimestamp”不是文档中唯一存在的字段,它还有其他字段,如下所示:

 {
"useCaseStatus" : "In Progress",
"feedbackRequested" : false,
"userFeedback" : null,
"startTimestamp" : "1567669352778"
}

通过向上述文档添加新字段,我不想删除已经存在的字段(因为到目前为止我得到的所有解决方案都删除了文档中存在的其他字段)。另外,在下面添加一个预期的文档(请注意小时和月份字段是字符串格式,而不是 int):

{
"useCaseStatus" : "In Progress",
"feedbackRequested" : false,
"userFeedback" : null,
"startTimestamp" : "1567669352778",
"endTimestamp" : null,
"date" : "05-09-2019",
"hour" : "13",
"month" : "9",
"time" : "13:12:32",
"weekDay" : "Thursday"
}

最佳答案

您可以使用以下聚合

db.collection.aggregate([
{ "$replaceRoot": {
"newRoot": {
"$let": {
"vars": { "date": { "$toDate": { "$toLong": "$startTimestamp" } } },
"in": {
"$mergeObjects": [
{
"date": { "$dateToString": { "date": "$$date", "format": "%d-%m-%Y" } },
"month": { "$toString": { "$month": "$$date" } },
"hour": { "$toString": { "$hour": "$$date" } },
"time": { "$dateToString": { "date": "$$date", "format": "%H-%M-%S" } },
"weekDay": { "$dayOfWeek": "$$date" }
},
"$$ROOT"
]
}
}
}
}},
{ "$out": "collectionName" }
])

Output

{
"date": "04-09-2019",
"hour": 12,
"month": 9,
"startTimestamp": "1567601927157",
"time": "12-58-47",
"weekDay": 4
}

关于Mongodb - 根据其他字段值添加额外字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57799174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com