2016-12-28 2 views
0

Мой документ mongodb показан ниже.документ не обновляется должным образом в mongodb

{"studid":"123", "name":"abc"} 

Я хочу обновить этот документ следующим образом.

{"studid":"123", "name":"abc", "class":"five", "sec":"b"} 

Для этого я написал код следующим образом и передал запрос и поле как.

имя - "studreg", запрос - {"studid":"123"} и поле - "class":"five", "sec":"b"

exports.modify = function(name,query,field) { 
    return new Promise(function(resolve,reject){ 
     var updateStr = '{$set:{'+field+'}}'; 
     console.log('updateStr: ' + updateStr); 
     dbase.collection(name,function(err,table){ 
      table.findAndModify(query,[[_id,desc]],updateStr,{w:1, new:true},function(err,result){ 
       if (err) reject(err); 
       else 
        resolve(result); 
      }); 
     }); 
    }); 
}; 

Как выход я получаю следующее сообщение, напечатанное на моем окне браузера, когда я вызов метода редактирования.

{"lastErrorObject":{"updatedExisting":true,"n":1},"value":{"_id":"585ce7d9bef96722642adfeb"},"ok":1} 

В базе данных, когда я пытаюсь найти документ, отображается только поле id, а не любые другие поля. Можете ли вы сообщить мне, где я делаю неправильно?

ответ

0

Проблема решена. Как сказал Рахул, проблема заключается в разборе обновленияStr. Когда я использовал JSON.parse ('{\ "$ set \": {' + field + '}}') и JSON.parse (query) при вызове метода, я получил ожидаемый результат.

1

От docs

Это говорит о том, что update поле должно быть объектом, не string, как раньше.

Таким образом, ваш поле ввода должно быть поле- {"class":"five", "sec":"b"}

Попробуйте как этот

exports.modify = function(name,query,field) { 
    return new Promise(function(resolve,reject){ 
     var updateObj = {$set: field}; //field must be object 
     console.log('updateStr: ' + updateStr); 
     dbase.collection(name,function(err,table){ 
      table.findAndModify(query,[['_id','desc']],updateObj,{upsert: true},function(err,result){ 
       if (err) reject(err); 
       else 
        resolve(result); 
      }); 
     }); 
    }); 
}; 

И еще одна вещь, которую я не видел _id, обязательное поле для mongodb document в вашей дано document.

+0

выше предложение не работает –

+0

У вас есть ошибки? –

+0

Как насчет этого поля '_id' в документе? –

0

Я думаю, что анализ Jyothi верен, но поле идет как строка и нуждается в преобразовании в качестве объекта. По-моему, просто создайте updateStr, как в вопросе, а затем используйте JSON.parse (updateStr), чтобы получить версию этого объекта.

exports.modify = function(name,query,field) { 
    return new Promise(function(resolve,reject){ 
     var updateStr = '{$set:{'+field+'}}'; 
     console.log('updateStr: ' + updateStr); 
     var updateObj = JSON.parse(updateStr); 
     dbase.collection(name,function(err,table){ 
      table.findAndModify(query,[[_id,desc]],updateObj,{w:1, new:true},function(err,result){ 
       if (err) reject(err); 
       else 
        resolve(result); 
      }); 
     }); 
    }); 
}; 

И тот факт, что она удаляет все другие переменные, но _ID только доказывает, к тому, что ваш updateStr не разобранного, как это должно быть.

+0

Я пробовал оба варианта, упомянутые в вашем комментарии. Но он все еще не работает. Более того, переменная filen используется в updateStr, которая инкапсулирована в {}. Я пытался использовать JSON.parse как для запроса, так и для updateStr при вызове findAndModify. Тем не менее он не работает. Я не получаю никаких ошибок, кроме сообщения, показанного в моем выше сообщении. –

Смежные вопросы