Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.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
Mongodb 将日期Y-m-d转换为MongoDate_Mongodb - Fatal编程技术网

Mongodb 将日期Y-m-d转换为MongoDate

Mongodb 将日期Y-m-d转换为MongoDate,mongodb,Mongodb,我需要一个查询来优化集合中的数据,并将所有字段date\u passport从Y-m-d格式转换为MongoDate格式,仅使用mongo查询即可 目前: { _id: ObjectId("522e261a7ecb75b34e000000"), type: "Chat", last_name: "Test", date_passport: '2013-11-28' } 需要: { _id: ObjectId("522e261a7ecb75b34e0000

我需要一个查询来优化集合中的数据,并将所有字段
date\u passport
从Y-m-d格式转换为MongoDate格式,仅使用mongo查询即可

目前:

{
    _id: ObjectId("522e261a7ecb75b34e000000"),
    type: "Chat",
    last_name: "Test",
    date_passport: '2013-11-28'
}
需要:

{
    _id: ObjectId("522e261a7ecb75b34e000000"),
    type: "Chat",
    last_name: "Test",
    date_passport: ISODate("2013-11-28T02:00:00.%LZ")
}
我如何解决这个问题:

如果您的日期是dd/mm/YYYY

db.customer.find(
    {
        date_passport : {$nin : ['', undefined]} // find for not is empty or undefined documents
    }
).forEach( function(obj) {
    if (typeof(obj.date_passport)!='object') { //check if is not already a ISODate
        var datePt = obj.date_passport.split('/'); //split the string dd/mm/YYYY
        var dateEn = datePt[2] + '-' + datePt[1] + '-' + datePt[0]; // reorganize to YYYY-mm-dd

        obj.date_passport = new ISODate(dateEn); // convert in ISODate
        db.customer.save(obj); //save and thats all
    }
});
如果您的数据已经是YYYY mm dd

db.customer.find(
    {
        date_passport : {$nin : ['', undefined]} // find for not is empty or undefined documents
    }
).forEach( function(obj) {
    if (typeof(obj.date_passport)!='object') { //check if is not already a ISODate
        obj.date_passport = new ISODate(obj.date_passport); // convert in ISODate
        db.customer.save(obj); //save and thats all
    }
});

您需要转换数据。您可以从MongoDB控制台执行此操作。只需循环浏览每个文件并更新
validade_pass
字段。此外,
YYYY-mm-dd
是日期格式,因此更便于携带和支持。如果有人想将日期存储为字符串,应该使用ISO8601。但是,如果我需要在mongodb上查询日期,我的日期字段需要作为对象ISODate,对吗?我的意思是,和mysql这样的日期一起工作。在我看来,使用字符串yyy-mm-dd在mongo上存储我的日期就像在mysql上做同样的事情一样(将日期存储为字符串类型,而不是日期),这种方式使数据难以处理。我同意你的观点。在JSON中发送日期时,我使用ISO 8601(
date.toISOString()
或自定义格式为
YYYY-mm-dd
),有时仅当不需要范围比较时,我才将其用作db中的文字字符串字段。