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

时间:2017-10-27 14:59:57

标签: 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前缀(课程,文档,资源......)来区分元素类型。 现在我想使用优化查询来获取所谓类型课程的所有元素。 一种选择可以是使用芒果查询,如:

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

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

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

通过调用此函数,我希望只获得"课程"元素,因为他们有"当然_"在_id字段中。相反,我似乎基本上得到了db上的所有可用文档。

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

debug session example

你能解释一下为什么吗?

1 个答案:

答案 0 :(得分:2)

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