web-dev-qa-db-fra.com

Comment convertir le champ _id de tous les documents existants de type chaîne en nombre

Dans l'une de mes collections, j'ai un _id champ qui stocke des chiffres. Le champ a été défini à l'origine dans le modèle de mangouste comme String. Cependant, toutes les données concernant ce champ dans la collection contiennent des entiers pure stockés comme des chaînes. Je souhaite conserver toutes les données de ma collection lors de la conversion du type de ce champ (et de tous les éléments associés _id 's) à partir de type String pour taper Number. Des suggestions comme comment faire cela? Merci.

4
W.M.
db.getCollection('test').find().forEach(function (doc) {
    db.getCollection('test').remove({ _id : doc._id});
    tempId = new NumberLong(doc._id);
    doc._id = tempId;
    db.getCollection('test').save(doc);
    } 
);

Cela fera. Vous voudrez peut-être ajouter une erreur d'erreur selon votre cas d'utilisation. Assurez-vous également que vous avez une sauvegarde avant de migrer.

6
titogeo