【问题标题】:doc not coming back in my results though it's requested in the options尽管选项中有要求,但文档没有返回到我的结果中
【发布时间】:2014-09-18 02:22:44
【问题描述】:

我将 PouchDB 3.0.5 与请求文档的查询调用一起使用(通过 include_docs: true 选项)但 doc 属性不存在(id、key 和 value 存在)。我做错了什么?

这是视图:

  {
     "_id": "_design/clubbers",
     "language": "javascript",
     "views": {
         "clubbers": {
             "map": "function(doc) {\n  if (doc.type === 'clubber') {\n    emit([doc.firstName, doc.lastName], doc.club);\n  }\n}"
         }
     }
  }

这是电话和我要回复的内容:

更新:

当我单步执行未缩小的 pouchdb.js 时,它似乎从第 9375 行(它将“var promise = Promise.resolve...”设置为“utils.promisedCallback...”行并且永远不会去进入上述行的“then”。我什至在其中放置了一行来捕获错误并将其写入控制台,它也被跳过了。opts 在整个过程中看起来都是正确的。

exports.query = function (fun, opts, callback) {
  if (typeof opts === 'function') {
    callback = opts;
    opts = {};
  }
  opts = utils.extend(true, {}, opts);

  if (typeof fun === 'function') {
    fun = {map : fun};
  }

  var db = this;
  var promise = Promise.resolve().then(function () {
    return queryPromised(db, fun, opts);
  });
  utils.promisedCallback(promise, callback);
  return promise;
};

更正:

它确实到达了 nlawson 指出的那段代码,但它跳过了“row.doc =joinedDoc”这一行

【问题讨论】:

    标签: pouchdb


    【解决方案1】:

    这真的很奇怪。查看您的代码,我看不出它不会返回文档的任何原因。

    您能否使用未缩小版的 PouchDB,单步执行代码,并确保 this line 被命中?

    【讨论】:

    • 第 542 行永远不会被击中(请参阅更新的问题),但它确实会尝试在此之前处理该行。
    • 看起来从查询返回的大多数文档都被删除了(为什么它们又回来了?)并且有一个没有被删除并且它确实具有 doc 属性-但是被删除的没有。所以我想我现在的问题是为什么删除的记录会在我的查询中返回,我怎么知道哪些记录被删除(结果集中没有告诉我)?
    • 听起来您可能发现了一个错误。我已经在这里提交了:github.com/pouchdb/mapreduce/issues/213。如果您可以在该 GitHub 问题中提供更多详细信息,那将非常有帮助。例如。你什么时候删除文档,你上次查询视图是什么时候,等等。谢谢! :)
    • 从技术上讲,查询中的 include_docs 中存在竞争条件(CouchDB 中也存在),因此如果您在查询的同时删除文档,则可能会发生这种情况。这就是你在做的吗?
    • 我已删除文档,然后运行查询。然后我会继续重试查询(通过刷新按钮)以追查问题。
    猜你喜欢
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多