2015-01-21 36 views
2

试图检索pouchDB中特定视图的更改,但仍接收allDocs ...我在做什么错误?没有找到任何教程或详细信息如何做到这一点,除了袋API API文档(http://pouchdb.com/api.html#changes)。我已经测试查看过滤器没有运气的选项。在特定视图中侦听pouchdb更改返回所有文档

这种观点是设计并保存为/注意到

function(doc) { 
    if (doc.model == 'note') { 
    emit(doc._id, doc); 
    } 
} 

直播变化饲料:

pouch.changes({ 
    live: true, 
    view: '_view/notes' 
}) 
.on('change', function handleUpdate(change) { 

    // log changed document 
    pouch.get(change.id).then(function(row) { 
    console.log(row); 
    } 

}) 

也许视觉路径是错误的......? 感谢您的帮助。

回答

0

更加简单,你可以这样做:

pouch.changes({ 
    live: true, 
    include_docs: true 
}).on('change', function (change) { 
    if (change.doc && change.doc.model === 'note') { 
    console.log(change); 
    } 
}); 

信任我。使用changes()过滤器中的视图只会增加不必要的复杂性,并且不会更快地执行。对不起,没有在文档中说清楚。 :)

+0

使用视图,当你想获得完整的数据库内容是无用的我同意。但是如果你想从你的数据库的一个子集复制呢。使用allDocs()中的视图,changes()和replicate()应该没问题,不是吗? – PhE 2015-01-28 05:39:43

+0

它应该工作,但TBH我没有用太多,所以我不能保证没有错误。而且,使用{view:'myview'},您不会获得任何性能/代码复杂度的好处。 虽然我会提交一个错误。 – nlawson 2015-01-28 17:02:11

+0

提交的bug:https://github.com/pouchdb/pouchdb/issues/3466 – nlawson 2015-01-28 17:03:05

0

默认情况下,更改()将返回数据库的开始的所有更改。 因此,您将收到所有文档更改,相当于调用allDocs()。

要从某个时间点获得更改,必须自起给出选项参数

PouchDB api doc

options.since: Start the results from the change immediately after the 
given sequence number, you can also pass 'now' if you want only 
new changes. 

你可以从一个呼叫序列号db.info()或通过db.get方法(的docId)与选项local_seq检索文档时

+0

如果你正在做实况转变,你也可以做'{since:“now”}'在给定时间点后开始聆听变化。 – nlawson 2015-02-17 17:04:51