Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在couchbase Node.js中执行删除/插入操作后获取最新数据_Javascript_Node.js_Couchbase - Fatal编程技术网

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

Javascript 在couchbase Node.js中执行删除/插入操作后获取最新数据,javascript,node.js,couchbase,Javascript,Node.js,Couchbase,在任何操作(插入/删除)后,我都很难获得最新的bucket文档。我使用node.js+express+couchbase,下面是我的代码,来自它的官方网站。它基本上只是一个简单的地址簿web应用程序,有三个功能:插入、显示或删除联系人 删除或插入操作后,我使用res.redirect(\”重新加载页面。问题是:它只显示旧数据,只有在我第二次重新加载它之后,它才会显示。我只是不知道这里出了什么问题。有人能帮忙吗 /* GET home page. */ router.get('/', functi

在任何操作(插入/删除)后,我都很难获得最新的bucket文档。我使用node.js+express+couchbase,下面是我的代码,来自它的官方网站。它基本上只是一个简单的地址簿web应用程序,有三个功能:插入、显示或删除联系人

删除或插入操作后,我使用
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;

在Couchbase中,视图最终是一致的,看起来您正在使用视图,因此您看到的是延迟。如果可以的话,最好通过密钥获取文档,这样Couchbase就非常一致。如果您有一个元数据对象,它是该用户所有联系人的手动索引,那么您将获得最大的性能。然后,当您需要他们的联系人时,您可以提取那个元数据对象,然后按键并行地批量获取所需的对象。这应该表现得很好,并且做完全相同的事情。最重要的是,您有一个密钥模式,可以向用户唯一地标识对象

另一个选项是每个用户有一个计数器对象,它是一个键值,只有计数器。例如,我们有一个键模式

用户名::联系人::计数器

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

hernandez94::联系人::139


计数器将是该用户联系人数组的上限。要获取最近的联系人,只需获取counter对象,获取该整数,构造键并精确获取该对象。会很快的。要获取所有联系人,您需要获取计数器对象,然后生成密钥以执行并行批量获取。再说一次,那会很快。没有查询,只是保持一致的原始速度。

看起来您需要在视图查询中使用stale=false。请参阅:

谢谢!我通过使用query函数为所有文档id编制索引,然后像您的第一个建议一样,通过
getMulti()
函数查询其内容,从而使其正常工作。但是,这是为什么呢?是虫子还是什么?因为我到处都找不到原因。