ここに私の質問があります:
MongoDBのnull型で1つのフィールドのすべての文字列型「NULL」をnullに変更する方法は?
MongoDBで1つのフィールドのすべての文字列型「20xx-xx-xx」を日付型に変更するには?
ここに私の質問があります:
MongoDBのnull型で1つのフィールドのすべての文字列型「NULL」をnullに変更する方法は?
MongoDBで1つのフィールドのすべての文字列型「20xx-xx-xx」を日付型に変更するには?
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型で1つのフィールドのすべての文字列型「NULL」をnullに変更する方法は?
db.foo.update({bar: "NULL"}, {$set: {bar: null}}, {multi: true})
MongoDBで1つのフィールドのすべての文字列型「20xx-xx-xx」を日付型に変更するには?
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)
}
)