2015-11-08 3 views
0

У меня есть следующие данные в nedb.Обновить строку в nedb

["UserId":"1446943507761","UserName":"xxx","link":"xxx.html","taskDone":"false","id":14,"_id":"fdaaTWSxloQZdYlT"] 
["UserId":"1446943507761","UserName":"xxx","link":"xxx.html","taskDone":"false","id":1,"_id":"fzh2cedAXxT76GwB"] 
["UserId":"1446943507761","UserName":"xxx","link":"xxx.html","taskDone":"false","id":0,"_id":"k4loE7XR5gioQk54"] 

Я пытаюсь обновить строку с id 0 и установить значение taskDone в значение true. Я использую следующий запрос, чтобы установить значение true:

db.taskmap.update({ _id: "k4loE7XR5gioQk54", UserName:"xxx" }, { $set: { taskDone: "true"} }, function (err, numReplaced) { 
    console.log("replaced---->" + numReplaced); 
    }); 

Он обновляет значение, но он обновляется как новая строка. Он в основном вставляет новую строку с одинаковыми значениями, за исключением значения taskdone как true. Он не удаляет существующие данные. Следовательно, в итоговой таблице данных после обновления я получаю строки буфера для id 0 со всеми значениями, кроме taskDone. Я не уверен, что я делаю что-то неправильно. Будет полезно, если кто-нибудь может сказать мне правильный способ обновления стоимости.

ответ

1

update хочет четыре аргумента

var Datastore = require('nedb'); 
var db = new Datastore(); 

db.insert(
[ 
    { 
    "UserId":"1446943507761", 
    "UserName":"xxx", 
    "link":"xxx.html", 
    "taskDone":"false", 
    "id":14, 
    "_id":"fdaaTWSxloQZdYlT" 
    }, 
{ 
    "UserId":"1446943507761", 
    "UserName":"xxx", 
    "link":"xxx.html", 
    "taskDone":"false", 
    "id":1, 
    "_id":"fzh2cedAXxT76GwB" 
}, 
{ 
    "UserId":"1446943507761", 
    "UserName":"xxx", 
    "link":"xxx.html", 
    "taskDone":"false", 
    "id":0, 
    "_id":"k4loE7XR5gioQk54" 
    }], 
    function (err, newDocs) { 
    // empty here 
    } 
); 
db.update(
      { _id: "k4loE7XR5gioQk54", UserName:"xxx" }, 
      { $set: { taskDone: "true"} }, 
      {},// this argument was missing 
      function (err, numReplaced) { 
      console.log("replaced---->" + numReplaced); 
      } 
      ); 
// should give the correct result now 
db.find({}).exec(function (err, docs) {console.log(docs);}); 
+0

Привет большое спасибо за предложение. Я попробовал это, но он по-прежнему вводит новую запись вместо обновления существующего. – user3202499

+0

Единственное различие заключается в использовании db direct. Это может быть проблема? – deamentiaemundi

+0

Привет, спасибо за предложение, я мог заставить его работать без db direct ... Я понял, что я использовал _id для доступа к строке, которая генерируется nedb для назначения уникального ключа для каждой строки. Я прекратил использовать _id для доступа к строке, и он отлично работает, хотя я не знаю причины. – user3202499