MongoDB kann nicht update-Dokument, weil _id ist string, nicht ObjectId

Mache ich eine rest-api für den Austausch von Daten zwischen einer mongo-Datenbank und eine web-app. Diese Daten sind in json formatiert.

Ich habe einen Problem, wenn es um die Aktualisierung eines Dokuments:

cannot change _id of a document.

Als eine Angelegenheit von der Tat, in meinem JSON die _id des doc wird als string gespeichert und deserialisiert werden als string. In der Erwägung, dass es gespeichert ist, als ein ObjectID in mongo. Dies erklärt, warum mongo wirft einen Fehler.

  • In mongo: _id: ObjectId('51051fd25b442a5849000001')
  • In JSON: _id:"51051fd25b442a5849000001"

Um dies zu vermeiden habe ich manuell konvertieren Sie die _id Eigenschaft von string zu einem ObjectID. Aber Es scheint hässlich und fehl mit anderen BSON-Arten.

Q: gibt es eine saubere Art und Weise zu vermeiden oder zu tun ein nettes JSON/BSON-Konvertierung?

Unten ist der code, den ich verwenden, um aktualisieren Sie ein Dokument. Ich bin mit mit nodejs, 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);
            }
        }
    );
});

};

InformationsquelleAutor t4ncr3d3 | 2013-01-29
Schreibe einen Kommentar