MongoDB не может обновить документ, потому что _id это строка, а не ObjectId

Я делаю API отдыха для обмена данными между базой данных Монго и веб-приложением. Эти данные в формате JSON.

У меня проблема с обновлением документа:

cannot change _id of a document.

На самом деле, в моем JSON _id документа хранится в виде строки и десериализуется в виде строки. В то время как он хранится какObjectID в монго. Это объясняет, почему Монго вызывает ошибку.

В монго: _id: ObjectId ('51051fd25b442a5849000001')В формате JSON: _id: "51051fd25b442a5849000001"

Чтобы избежать этого, я вручную конвертирую свойство _id изстрока чтобыObjectID, Но это кажется уродливым и потерпит неудачу с другими типами BSON.

Q: Есть ли чистый способ избежать этого или сделать хорошее преобразование JSON / BSON?

Ниже приведен код, который я использую для обновления документа. Я использую nodejs с Express и Mongodb с родным драйвером.

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);
            }
        }
    );
});

};

Ответы на вопрос(1)

Ваш ответ на вопрос