gpt4 book ai didi

javascript - 如何将数组中的日期字符串更新为 mongoDB 中的日期格式?

转载 作者:行者123 更新时间:2023-12-04 09:09:09 25 4
gpt4 key购买 nike

我的 mongoDB 集合如下所示:

[
{
"id": "myid",
"field": {
"total": 1,
"subfield": [
{
"time": "2020-08-06T08:33:57.977+0530"

},
{
"time": "2020-05-08T04:13:27.977+0530"

}
]
}
},
{
"id": "myid2",
"field": {
"total": 1,
"subfield": [
{
"time": "2020-07-31T10:15:50.184+0530"
}
]
}
}
]
我需要更新所有文档并转换字段 time 中的日期字符串在 subfield 中可用数组到 mongoDB ISO 日期格式。
我在 subfield 中有数千个文档和数百个对象大批
我知道聚合函数 $todate$convert .
但我不想使用聚合,因为,
  • 使用 $todate$convert ,我需要解开field.subfield 数组,这又是一个昂贵的操作。
  • 我想更新我的文档并以日期格式保存它。

  • My MongoDB server version: 4.0.3


    我尝试了以下操作,但它似乎不起作用,也没有返回任何错误。
    db.collection.find().forEach(function(doc) { 
    doc.field.subfield.time=new ISODate(doc.field.subfield.time);
    db.collection.save(doc);
    })

    最佳答案

    您错过了 subfield 的循环,因为它是一个数组,

    db.collection.find().forEach(function(doc) { 
    doc.field.subfield.forEach(function(r) {
    r.time = new ISODate(r.time);
    })
    db.collection.save(doc);
    })
    如果这是一次,那么时间并不重要,我认为如果您使用聚合或 forEach,两者都将花费相同的时间。

    如果您打算更新 MongoDb 版本,请使用 4.2,
    您可以使用 updateMany() 更新的选项使用 update with aggregation pipeline ,
    db.collection.updateMany({},
    [{
    $set: {
    "field.subfield": {
    $map: {
    input: "$field.subfield",
    as: "r",
    in: {
    $mergeObjects: [
    "$$r",
    { time: { $toDate: "$$r.time" } }
    ]
    }
    }
    }
    }
    }]
    )

    关于javascript - 如何将数组中的日期字符串更新为 mongoDB 中的日期格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63388412/

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