如何使用typicode / lowdb文件数据库更新项目数组?

时间:2016-02-11 01:34:40

标签: javascript json database express

您好我正在使用typicode / lowdb json文件作为数据库测试快速应用程序,但我无法使更新功能正常工作。 这是一些代码示例:

typicode / lowdb db.json

{
      "posts": [
        {
          "name": "first post",
          "desc": "first desc",
          "slug": "first-post",
          "id": "uuid.v4()"
        },
       {
          "name": "second post",
          "desc": "second desc",
          "slug": "second-post",
          "id": "uuid.v4()"
        }
      ]
    }

创建/更新/ delete.js

var uuid = require('node-uuid');
var low = require('lowdb');
var storage = require('lowdb/file-async');
var db = low('./database/db.json',{ storage: storage });

var add = function (item) {
var id = uuid.v4();
item.id = id;
db('posts').push(item);  
};

var getById = function (id) {
return db('posts').find({ id: id});
};

var update = function (item,id) {
item.id = id;
 db('posts').chain().find({ id: id}).assign(item).value();
//nothing happens the db.json file is not updated

//using console log i get this from update:
             {
              "name": "first post edited",
              "desc": "first desc edited",
              "slug": "first-post-edited",
              "id": "undifined"
            }
console.log(db('posts').chain().find({ id: id}).assign(item).value());

};

handle-the-update.js

的示例
 exports.update = router.post('/update',function (req, res) {

 db.update({name:req.body.name,desc:req.body.desc,slug:slug,id:req.params.id});
res.redirect('/post');
});

创建删除并获取帖子by-id函数工作正常唯一的问题是更新。 知道为什么会这样吗?我测试了 .filter() .where(),但db.json文件无法正常更新

2 个答案:

答案 0 :(得分:1)

今天有同样的问题。不确定自问题以来GitHub上的lowDB自述文件是否发生了变化,但现在它的工作原理与此类似。

以下是您的代码示例:



var low = require('lowdb');
var fileAsync = require('lowdb/file-async');
var db = low('./database/db.json',{ storage: fileAsync });
var postStore = db.get('posts');

postStore.find({ id: "uuid.v4()" })
   .assign({name: "new name"})
   .value();




这应该有效。今天已经过测试。

它会更新两个示例记录,因为它们具有相同的ID。

答案 1 :(得分:0)

根据lowdb指南,你必须调用write()方法。 所以替换你的字符串:

db('posts').chain().find({ id: id}).assign(item).value();

要:

db('posts').chain().find({ id: id}).assign(item).write();