最初的想法是用update-set:
> db.class.update( {"_id": ObjectId("5405a4e5acff6a9f22000000")} , {$set: {"_id": ObjectId("53fc56c0acff6ace4d000000")}} );
Mod on _id not allowed
可能是set不給力的原因。
那麼可以把原文檔保存到變量裡面,修改_id的值,再update回去嗎?
var o = db.class.findOne( { "_id": ObjectId("5405a4e5acff6a9f22000000")});
> o._id = ObjectId("53fc56c0acff6ace4d000000");
ObjectId("53fc56c0acff6ace4d000000")
> db.class.update( {"_id": ObjectId("5405a4e5acff6a9f22000000")} ,o );
cannot change _id of a document old: xxxx new:xxxxx
無奈了。
只好拿出絕招:
> var o = db.class.findOne( { "_id": ObjectId("5405a3b0acff6a440a000000")});
>
> o._id = ObjectId("53fc5705acff6a7a6b000000");
ObjectId("53fc5705acff6a7a6b000000")
>
> db.class.save(o);
然後再刪除舊的數據……..