MongoDB nie może zaktualizować dokumentu, ponieważ _id jest łańcuchem, a nie ObjectId
Robię odpoczynek api w celu wymiany danych między bazą danych Mongo a aplikacją internetową. Dane te są sformatowane json.
Mam problem z aktualizacją dokumentu:
cannot change _id of a document.
W rzeczywistości w moim JSON _id dokumentu jest przechowywany jako ciąg znaków i deserializowany jako ciąg. Natomiast jest przechowywany jakoObjectID w mongo. To wyjaśnia, dlaczego mongo powoduje błąd.
W mongo: _id: ObjectId ('51051fd25b442a5849000001')W JSON: _id: „51051fd25b442a5849000001”Aby tego uniknąć, ręcznie konwertuję właściwość _id z astrunowy doObjectID. Ale wydaje się brzydki i nie powiedzie się z innymi typami BSON.
P: Czy istnieje czysty sposób na uniknięcie tego lub wykonanie ładnej konwersji JSON / BSON?
Poniżej znajduje się kod, którego używam do aktualizacji dokumentu. Używam nodejs z express i mongodb z natywnym sterownikiem.
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);
}
}
);
});
};