Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在mongoDB中将数组中的日期字符串更新为日期格式?_Javascript_Mongodb_Date_Mongodb Query_Isodate - Fatal编程技术网

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

Javascript 如何在mongoDB中将数组中的日期字符串更新为日期格式?,javascript,mongodb,date,mongodb-query,isodate,Javascript,Mongodb,Date,Mongodb Query,Isodate,我的mongoDB集合如下所示: [ { "id": "myid", "field": { "total": 1, "subfield": [ { "time": "2020-08-06T08:33:57.977+0530" }, {

我的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"
        }
      ]
    }
  }
]
我需要更新所有文档,并将
子字段中可用的
时间
字段中的日期字符串转换为mongoDB ISO日期格式

我在
子字段中有数千个文档和数百个对象

我知道聚合函数
$todate
$convert
。 但我不想使用聚合,因为

  • 要使用
    $todate
    $convert
    ,我需要解开
    field.subfield
    数组,这同样是一个昂贵的操作

  • 我想更新我的文档并用日期格式保存它

  • 我的MongoDB服务器版本:4.0.3

    我尝试了以下方法,但似乎不起作用,也没有返回任何错误

    db.collection.find().forEach(function(doc) { 
    doc.field.subfield.time=new ISODate(doc.field.subfield.time);
    db.collection.save(doc); 
    })
    

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

    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()
    更新的选项


    聚合框架支持使用$merge进行更新。感谢您指出。但它仅在版本4.2中可用。我的是4.0@D.SMIs这是一次性操作吗?是@wernfrieddomscheit如果你有数千份文档,应该没问题。如果有数百万份文件,你可能会担心
    db.collection.updateMany({},
        [{
            $set: {
                "field.subfield": {
                    $map: {
                        input: "$field.subfield",
                        as: "r",
                        in: {
                            $mergeObjects: [
                                "$$r",
                                { time: { $toDate: "$$r.time" } }
                            ]
                        }
                    }
                }
            }
        }]
    )