在couchbase Node.js中删除/插入操作后获取最新数据

时间:2015-03-28 14:44:56

标签: javascript node.js couchbase

我很难在任何操作(插入/删除)之后获取最新的存储桶文档。我使用node.js + express + couchbase,这是我的代码,源自其官方网站。它基本上只是一个简单的地址簿web-app,有三个功能:插入,显示或删除联系人。

删除或插入操作后,我使用res.redirect("\")重新加载我的页面。问题是:它只显示旧数据,只有在我第二次重新加载后才显示。我只是不知道这里有什么问题。有人可以帮忙吗?

/* GET home page. */
router.get('/', function(req, res) {
   var query   = ViewQuery.from('view_people', 'by_id');
   bucket.query(query, function(err, results){
       return res.render('index', {people: results});
   });
});

/* INSERT Contact here */
router.post('/insert', function(req, res){
    var name    = req.body.name;
    var address = req.body.address;
    var job     = req.body.job;
    var age     = req.body.age;
    bucket.insert(name, {
    name    : name,
    address : address,
    job     : job,
    age     : age
    }, function(err, reply){
        if(err) return res.send(err);
        return res.redirect('/');
    })
});

/* REMOVE the contact */
router.get('/remove', function(req, res){
    var id = req.query.id;
    bucket.remove(id, function(err, response){
        if (err) {return res.send(err);} 
        return res.redirect('/');
    })
});

module.exports = router;

2 个答案:

答案 0 :(得分:0)

在Couchbase中,视图最终是一致的,看起来您正在使用视图,因此您看到了滞后。如果可以,您最好通过密钥获取文档,然后Couchbase非常一致。如果您的元数据对象是所有该用户的联系人的手动索引,那么您将获得最佳性能。然后,当您想要他们的联系人时,您拉动该元数据对象,然后通过密钥进行所需对象的并行批量获取。这应该非常好,并做同样的事情。最重要的是,您有一个唯一标识用户对象的密钥模式。

另一种选择是每个用户拥有一个计数器对象,它只是一个只有计数器的键值。所以例如有一个关键模式

用户名::接触::计数器

填写后,对象的键可能看起来像

hernandez94 ::接触:: 139

计数器将是该用户的联系人数组的上限。要获得最近的联系人,您只需获取计数器对象,获取该整数,构造密钥并获得该对象。它会非常快。要获取所有联系人,您将获得计数器对象,然后生成密钥以执行并行批量获取。再说一遍,这非常快。没有查询,只是原始速度可以持续扩展。

答案 1 :(得分:0)

看起来您需要在视图查询中使用stale = false。请参阅:https://forums.couchbase.com/t/how-does-stale-query-work/870