1

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 の 2 つの行が取得され、taskDone を除いてすべての値が同じになります。私が何か間違ったことをしているかどうかはわかりません。誰かが値を更新する正しい方法を教えてくれると助かります。

4

2 に答える 2

1

update4 つの引数が必要です

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);});
于 2015-11-08T02:56:36.003 に答える