MongoDB kann das Dokument nicht aktualisieren, da _id eine Zeichenfolge und keine ObjectId ist
Ich mache eine Pause api, um Daten zwischen einer Mongo-Datenbank und einer Web-App auszutauschen. Diese Daten sind json-formatiert.
Ich habe Probleme beim Aktualisieren eines Dokuments:
cannot change _id of a document.
Tatsächlich wird in meinem JSON die _id des Dokuments als Zeichenfolge gespeichert und als Zeichenfolge deserialisiert. Während es als gespeichert wirdObjekt Identifikation im mongo. Dies erklärt, warum Mongo einen Fehler auslöst.
Im Mongo: _id: ObjectId ('51051fd25b442a5849000001')In JSON: _id: "51051fd25b442a5849000001"Um dies zu vermeiden, konvertiere ich die Eigenschaft _id manuell von aZeichenfolge zu einemObjekt Identifikation. Aber es scheint hässlich und wird mit anderen BSON-Typen scheitern.
F: Gibt es eine saubere Möglichkeit, dies zu vermeiden oder eine nette JSON / BSON-Konvertierung durchzuführen?
Unten ist der Code, mit dem ich ein Dokument aktualisiere. Ich benutze Nodejs mit Express und Mongodb mit dem nativen Treiber.
exports.updateById = function(req, res) {
var id = req.params.id;
var map = req.body;
map._id = new ObjectID.createFromHexString( map._id); // Manual conversion. How to avoid this???
console.log( 'Updating map: ' + id);
console.log( 'Map: ' + JSON.stringify( map));
db.collection('maps', function(err, collection) {
if(err) throw err;
collection.update(
{'_id': new BSON.ObjectID(id)}, map, {safe:true},
function(err, result) {
if (err) {
console.log('Updating map err: ' + JSON.stringify( err));
res.json( 500, {'message':'An error has occurred while updating the map', 'error': err});
} else {
console.log('Updating succeed');
res.send(map);
}
}
);
});
};