159 votes

Comment mettre à jour l'identifiant d'un document MongoDB?

Je veux mettre à jour un _id MongoDB d'un document. Je sais que ce n'est pas une très bonne pratique. Mais pour des raisons techniques, j’ai besoin de le mettre à jour. Mais si j'essaye de le mettre à jour, j'ai:

 > db.clients.update({'_id':ObjectId("4cc45467c55f4d2d2a000002")}, {'$set':{'_id':ObjectId("4c8a331bda76c559ef000004")}});
Mod on _id not allowed
 

Et la mise à jour n'est pas faite. Comment je peux vraiment le mettre à jour?

260voto

Niels van der Rest Points 11802

Vous ne pouvez pas le mettre à jour. Vous devrez enregistrer le document en utilisant un nouveau _id , puis supprimer l'ancien document.

 // store the document in a variable
doc = db.clients.findOne({_id: ObjectId("4cc45467c55f4d2d2a000002")})

// set a new _id on the document
doc._id = ObjectId("4c8a331bda76c559ef000004")

// insert the document, using the new _id
db.clients.insert(doc)

// remove the document with the old _id
db.clients.remove({_id: ObjectId("4cc45467c55f4d2d2a000002")})
 

37voto

Patrick Points 846

Pour le faire pour toute votre collection, vous pouvez également utiliser une boucle (basée sur l'exemple de Niels):

 db.status.find().forEach(function(doc){ var id=doc._id; doc._id=doc.UserId; db.status.insert(doc); db.status.remove({_id:id}); })
 

Dans ce cas, UserId était le nouvel ID que je voulais utiliser.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X