以下是我的问题:
如何在MongoDB中将一个字段中的所有字符串类型“NULL”更改为null类型的null?
如何将一个字段中的所有字符串类型“20xx-xx-xx”更改为MongoDB中的日期类型?
以下是我的问题:
如何在MongoDB中将一个字段中的所有字符串类型“NULL”更改为null类型的null?
如何将一个字段中的所有字符串类型“20xx-xx-xx”更改为MongoDB中的日期类型?
db.foo.insert({bar: "NULL", date: "2012-11-30"})
db.foo.insert({bar: "NULL", date: "2010-09-21"})
db.foo.insert({bar: "NOTNULL", date: "2010-09-21"})
如何在MongoDB中将一个字段中的所有字符串类型“NULL”更改为null类型的null?
db.foo.update({bar: "NULL"}, {$set: {bar: null}}, {multi: true})
如何将一个字段中的所有字符串类型“20xx-xx-xx”更改为MongoDB中的日期类型?
db.foo.find({date: {$exists: true}}).forEach(
function(doc) {doc.date = new Date(doc.date); db.foo.save(doc)}
)
编辑
如果由于某种原因您对默认解析有问题,可以手动完成:
假设您有这样的文件
doc = {date: "2012-01-30"}
首先在连字符上拆分字符串表示并将每个字符串转换为整数
dateArray = doc.date.split('-').map(function(s) { return parseInt(s); })
月份字段减1(js中的月份从0开始计算)
dateArray[1] -= 1
现在我们可以创建新的日期对象。谁有一些事情要考虑。当您将字符串解析为日期时,假设使用此字符串时该字符串表示 UTC 日期:
new Date("2012-01-30")
你会得到
ISODate("2012-01-30T00:00:00Z")
您也可以Date
像这样创建构造函数
new Date(dateArray[0], dateArray[1], dateArray[2])
但它会假设数据正在使用本地 tz,所以在我的情况下(GMT+1)我得到:
ISODate("2012-01-29T23:00:00Z")
如果不是您想要的,您可以手动设置一些字段:
date = new Date(0) // ISODate("1970-01-01T00:00:00Z")
date.setUTCFullYear(dateArray[0], dateArray[1], dateArray[2])
现在日期看起来像这样:
ISODate("2012-01-30T00:00:00Z")
将它们包装在一起:
db.foo.find({date: {$exists: true}}).forEach(
function(doc) {
dateArray = doc.date.split('-').map(function(s) { return parseInt(s); });
dateArray[1] -= 1;
date = new Date(0);
date.setUTCFullYear(dateArray[0], dateArray[1], dateArray[2]);
doc.date = date;
db.foo.save(doc)
}
)