为什么“从”复制后第一次使用PouchDb视图返回的记录比实际少?

时间:2018-12-19 01:18:55

标签: pouchdb

我无法解决通过replicate.from()来查询记录的问题。

我的视图设计文档如下:

{
  "_id": "_design/sequences",
  "views": {
    "last_invoice_id": {
      "map": "function(doc) {if (doc.data && doc.data.type === 'invoice' && !doc.data.metadata && !doc.meta) emit(doc.data.idib, doc.data.codigo)}"
    }
  }
}

相关代码部分如下所示:

const filterName = 'core_data/by_entities';
const initialReplicator = databaseLocal.replicate.from(databaseRemote, {
  live: true,
  retry: true,
  filter: filterName,
  batch_size: 500,
})
  .on('paused', (err) => {
    LG.debug(`
      *** REPLICATION PAUSED *** `);

    databaseLocal.query(
      'sequences/last_invoice_id',
      { descending: true, limit: 1 },
    ).then(rslt => LG.debug(`\nLAST ID : ${JSON.stringify(rslt, null, 2)} `));

    databaseLocal.allDocs({
      include_docs: true,
      attachments: true,
      descending: true,
      endkey: 'Invoice_1_0000000000000000',
      startkey: 'Invoice_3',
      limit: 1,
    })
      .then(rslt => LG.debug(`\nLAST INVOICE:\n${JSON.stringify(rslt, null, 2)}`))

执行后,allDocs的结果如下所示……

2018-12-18T22:35:23.190Z [CouchDB Supervisor] debug: 
LAST INVOICE:
{
  "total_rows": 3903,
  "offset": 0,
  "rows": [
    {
      "id": "Invoice_1_0000000000003633",
      "key": "Invoice_1_0000000000003633",
      "value": {
        "rev": "1-b7529876b57dccad8a7d79f83868507f"
      },
      "doc": {
        "data": {
          "idib": "3633",
          "type": "invoice",
            :
            :
          "codigo": "001-001-000009855",
            :
            :
        },
        "_id": "Invoice_1_0000000000003633",
        "_rev": "1-b7529876b57dccad8a7d79f83868507f"
      }
    }
  ]
} 

...但是query的结果看起来像这样...

2018-12-18T22:35:23.229Z [CouchDB Supervisor] debug: 
LAST ID : {
  "total_rows": 3632,
  "offset": 0,
  "rows": [
    {
      "key": "3632",
      "id": "Invoice_1_0000000000003632",
      "value": "001-001-000009854"
    }
  ]
} 

如您所见,query使用descending: true, limit: 1仅返回找到的最后一条记录。错误地发现Invoice_1_0000000000003632是最后一条记录。

您还可以看到,从与allDocs相同的数据集中进行选择将返回实际上在可用记录集中找到的最后一条记录:Invoice_1_0000000000003633

提示:如果我插入新记录,Invoice_1_0000000000003634query会更正自身,并从此返回与allDocs相同的值。

我认为可能涉及竞争条件,与复制暂停时使用视图有关,因此我切换到单次复制。没什么。

到目前为止,除以下内容外,我没有找到其他解决方案:

    复制完成后
  1. 插入新记录,或者
  2. 使用allDocs代替视图。

是错误,还是我做错了什么?

(我在NodeJs 8.11.1中使用PouchDb 7.0.0)

0 个答案:

没有答案