在 PouchDB 中正确使用带有 startkey 和 endkey 的 findAll

Proper use of findAll with startkey and endkey in PouchDB

我有一个 pouchdb 文档数据库,其中包含以下示例中的元素

{
 "_id": "course_2_34E82B43-3F14-2FF7-9D37-81B293D2990F",
 "_rev": "18-8f8f2426a12739ffb9f3bebe27d5f158",
 "data": {
  "name": "HACCP formation",
  "isPeriodValidity": true,
  "validityMonths": 2,
  "minNumEmployees": 4,
  "amount": 50,
  "isByCompany": true,
  "activities": [
   "03E0E23F-58C4-3747-A441-6CF8DFE7EF75",
   "CB88B914-281A-6FC2-8A5A-10322AB93B1F"
  ],
  "services": [],
  "offers": [],
  "offerServices": [],
  "unmanagedServices": []
 }
}

{
 "_id": "document_2_24A7DB52-031E-338A-941F-450CC4760E49",
 "_rev": "12-3a704b186d6d1f5490756a983ccdc526",
 "data": {
  "name": "MMC",
  "isPeriodValidity": true,
  "validityMonths": 3,
  "minNumEmployees": 0,
  "amount": 300,
  "resources": [],
  "activities": [
   "B52ED0EB-22F7-800A-B678-D8E36C58354E"
  ],
  "offers": [],
  "offerServices": [],
  "unmanagedServices": []
 }
}

{
 "_id": "resource_2_6CFE5DA9-4756-0933-B11E-1E6C546F1AB4",
 "_rev": "1-0e30424758084f2d1acf042ba8c5fb19",
 "data": {
  "path": "aa",
  "description": "aa"
 }
}

我可以通过查看 _id 前缀(课程、文档、资源...)来区分元素类型。 现在我想使用优化查询来获取 say 类型课程的所有元素。 一种选择是使用芒果查询,例如:

{
  "selector": {
    "_id": {
      "$regex": "course_"
    }
  }
}

但根据文档 here,似乎更优化的选项是将 allDocs 函数与 "startkey" 和 "endkey" 结合使用。例如:

database.allDocs({
    include_docs: true,
    startkey: "course_",
    endKey: "course_\uffff"
})

通过调用此函数,我希望仅获得 "course" 元素,因为它们在 _id 字段中具有 "course_"。相反,我似乎基本上获得了 db 上的所有可用文档。

我正在添加调试会话中的图像,希望它能更好地解释情况。您可以看到传递给数据库的 searchTerm 变量,以及执行调用的代码和部分结果。如您所见,只有前 4 个结果与搜索关键字匹配,而以下内容在我看来是来自数据库的随机内容。

你能解释一下为什么吗?

你的 "endkey" 属性 是 "endKey"。您必须确保不要将 "key" 大写。同样的错误我已经犯过很多次了。