pouchdb query()在emit()上省略文件

时间:2018-05-24 16:50:51

标签: react-native couchdb pouchdb

由于某些原因,我的过滤器无法正常工作。它刚刚工作正常,然后由于某种原因,它停止返回所有模板,只开始返回其中一个。

任何帮助,为什么它返回两次,但只给我一个将非常感激。

我有以下代码:

export async function testMe() {
    const company_id = await AsyncStorage.getItem('company_id');
    const device_db = new PouchDB(company_id, {});

    device_db.query(function(doc, emit){
        console.log(doc.type, doc._id, doc._rev);
        if(doc.type == 'template') {
            emit(doc._id, doc); 
        }
    }).then((result) => { 
        console.log("Returned", result);
    })
}

奇怪的是,这就是得到的回报:

template template_1 18-5918af4c5370d9755d0bb8b6dcb21ea1
template template_2 19-8191dec49dfa8c1a2f03d752a193f09e
template template_3 39-74f3b82ce4a38a501810b5ff31efc593
undefined "dpbcab6843-2cdf-4d4c-87ae-286dcddaac22" "2-8f03f3127771dadd3c8f7beb3e827982"
undefined "dpdc6f6cd0-6c6d-4974-a166-b848a0217af4" "2-0eec1a8d925641aa8bf30e058e6515e7"
undefined "dpe1573a70-a281-4e15-a997-82d8bf8fabfa" "2-d3bbcb81344f61cc94459610695c6670"
template template_3 39-74f3b82ce4a38a501810b5ff31efc593

你可以忽略undefined,但我想要展示的是看看两次返回的内容:

template template_3 39-74f3b82ce4a38a501810b5ff31efc593

Returned console.log()中,这是唯一返回的内容(最后一个template_3数据,完全忽略其他模板,即使它们都是template类型):

{"total_rows":6,"offset":0,"rows":[{"key":"template_3","id":"template_3","value":{..}}]}

修改

它变得更加怪异。我刚刚打开template_2并进行了保存(在cloudant中)并与我的设备同步以更新_rev,现在我得到了:

template template_1 18-5918af4c5370d9755d0bb8b6dcb21ea1
template template_2 20-c549fe868735ef0099b80f6668af611c
template template_3 39-74f3b82ce4a38a501810b5ff31efc593
undefined "dpbcab6843-2cdf-4d4c-87ae-286dcddaac22" "2-8f03f3127771dadd3c8f7beb3e827982"
undefined "dpdc6f6cd0-6c6d-4974-a166-b848a0217af4" "2-0eec1a8d925641aa8bf30e058e6515e7"
undefined "dpe1573a70-a281-4e15-a997-82d8bf8fabfa" "2-d3bbcb81344f61cc94459610695c6670"
template template_3 39-74f3b82ce4a38a501810b5ff31efc593
template template_2 20-c549fe868735ef0099b80f6668af611c

返回(省略template_3):

{"total_rows":6,"offset":0,"rows":[{"key":"template_2","id":"template_2","value":{..}}]}

编辑#2

我补充说:

.catch((err) => {
    console.log(err);
})

得到这个:{"status":409,"name":"conflict","message":"Document update conflict","error":true}

但是,我执行以下操作,所有_conflict数组都为空。

device_db.allDocs({conflicts: true})
.then((data) => {
    for (let d of data.rows) {
        console.log(d.doc._conflicts);
    }
 });

1 个答案:

答案 0 :(得分:0)

我认为像这样的临时查询应该有一个密钥,否则查询将不知道您要选择哪些文档。 the PouchDb docs的示例是

db.query(function (doc, emit) {
  emit(doc.name);
}, {key: 'foo'}).then(function (result) {
  // found docs with name === 'foo'
}).catch(function (err) {
  // handle any errors
});

以便使用"名称"字段等于" foo"由查询返回。在您的查询中,键似乎未定义。这可能解释了你得到的奇怪结果?