我剛剛從SQL數據庫導入了一些數據到MongoDB集合中,並且正在做一些重構。我剛剛從「YYYY-MM-DD」格式轉換爲字符串日期值有:我可以在控制檯中從日期創建新的ObjectId var嗎?
db.Statistic.find({d: {$exists: false}}).forEach(function (x) {
var d = ISODate(x.date);
db.Statistic.update(x, {$set: {"d": d}});
});
這一直運作良好。現在我想用一個使用這個日期的_id重建對象,這樣我就不需要單獨的日期字段。我曾嘗試(和許多變化):
db.Statistic.find({d: {$exists: true}}).forEach(function (x) {
var oldId = x._id;
x._id = new ObjectId(x.d);
db.Statistic.save(x);
db.Statistic.remove({_id: oldId});
});
,但我得到Error: invalid object id: length
我假設,因爲控制檯的ObjectID構造函數不接受日期以建立一個新的對象ID。在控制檯中有沒有辦法做到這一點?
關於第2部分,我意識到這一點 - 這就是爲什麼我不嘗試更改現有保存文檔的_id的原因。我保存一個新文檔(只是重複使用這些字段),然後刪除舊文檔,以便它位於同一個集合中。我同意我可能應該導入到臨時集合中,然後將重構對象保存到最終集合中。 –
@NicholasTolleyCottrell啊。 ** save **函數(回答中的鏈接)顯式地保持原始'_id'完好無損。那是那裏的問題。現在解釋。 –
我不認爲這是問題,因爲它甚至沒有保存。根據你的文檔:'如果文檔包含_id字段,則save()方法執行一個upsert,查詢_id字段上的集合。如果文檔不存在指定的_id值,則save()方法將執行insert操作。由於我設置了一個新的不存在的_id,因此upsert應該爲我正確插入一個新文檔。 –