Couchbase lite 更新couchbaselite设计文档不会改变我的视图结果

Couchbase lite 更新couchbaselite设计文档不会改变我的视图结果,couchbase-lite,couchbase-view,Couchbase Lite,Couchbase View,我正在开发一个react本地应用程序,并使用Couchbase lite作为本地数据库。其工作方式是在应用程序启动时生成本地REST服务器,并使用REST API与CouchbaseLite服务器通信 我已经创建了一些设计文档,但是当我尝试更新这些文档时,当我运行REST客户端(我用于调试的单独应用程序)时,并没有得到新的结果。当我GET设计文档时,它在更新后有一个新的\u版本,新的map功能与我更新的功能相同,但每当我在视图上执行GET时,结果与map功能的第一个版本相同 显然,get没有使用

我正在开发一个react本地应用程序,并使用Couchbase lite作为本地数据库。其工作方式是在应用程序启动时生成本地REST服务器,并使用REST API与CouchbaseLite服务器通信

我已经创建了一些设计文档,但是当我尝试更新这些文档时,当我运行REST客户端(我用于调试的单独应用程序)时,并没有得到新的结果。当我
GET
设计文档时,它在更新后有一个新的
\u版本
,新的
map
功能与我更新的功能相同,但每当我在视图上执行
GET
时,结果与
map
功能的第一个版本相同

显然,
get
没有使用更新的文档

设计文件:

var designDoc = {
  name: 'expenses',
  language: 'javascript',
  views: {
    contact_parts_for_group: {
      'map': function(doc){
        if(doc.type == 'expense'){
          emit('some things I emit', doc.amount)
        }
      }.toString()
    }
  }
};
我将其与适当的
\u rev
一起作为json正文发送到服务器:
json.stringify(designDoc)
1.我正在使用PUT调用更新我的设计文档:

PUT /kittydb/_design/expenses?rev=4-6f89f1e13d1fbb89c712d6bab53ee7d4 HTTP/1.1
Host: 127.0.0.1:5800
Connection: close
User-Agent: Paw/2.2.2 (Macintosh; OS X/10.11.2) GCDHTTPRequest
Content-Length: 356

{"name":"expenses","language":"javascript","views":{"contact_parts_for_group":{"map":"function (doc){ if(doc.type=='expense'){ var i,len,part,ref;  ref=doc.parts; for(i=0,len=ref.length;i<len;i++){ part=ref[i]; var amount=part.contact==doc.expense_by?-1*part.amount:part.amount; emit([doc.group_id,part.contact,part.contact==doc.expense_by],amount);}}}"}}}
针对某些评论的更多信息:

我使用的是CouchbaseLite社区版,iOS版1.1.1。我正在用iOS9.2作为iPhone6运行模拟器

我制作了一些截图来进一步说明正在发生的事情:

我不知道如何检索与此相关的map函数,但它似乎要做的是:

emit([doc.group\u id,part.contact],amount)

我使用了上面的get

现在我的更新:

PUT /kittydb/_design/expenses?rev=7-6f979706f38acce9c7db380fba8565e4 HTTP/1.1
Host: 127.0.0.1:5800
Connection: close
User-Agent: Paw/2.2.2 (Macintosh; OS X/10.11.2) GCDHTTPRequest
Content-Length: 350

{
  "name": "expenses",
  "language": "javascript",
  "views": {
    "contact_parts_for_group": {
      "map": "function (doc){ if(doc.type=='expense'){ var i,len,part,ref;  ref=doc.parts; for(i=0,len=ref.length;i<len;i++){ part=ref[i]; var amount=part.contact==doc.expense_by?-1*part.amount:part.amount; emit('Hello SO', 'Overflow');}}}"
    }
  }
}
现在,我再次运行get请求:

什么都没变

当我用“type=expense”创建一个新文档时,我得到了相同的结果,只是更多的结果

我不知道如何检索与此相关的map函数

啊哈——如果您不知道原始视图定义在哪里,并且无法从设计文档中获取它,那么它可能是在本机代码中定义的(在应用程序启动时)。这样的定义将覆盖设计文档中的定义


我一点也不知道。应用程序中是否有(顾名思义)本机代码?如果是这样,请致电
[CBLView setMapBlock:…]

Hey@Mosselman,询问有关上述内容的几个问题和评论:[1]您如何更新文档?打电话还是直接修改数据库?[2] 当您从一个空文档开始时,如何在客户端填充新结果?[3] 在更新文档后,地图功能不应更改或已经更改,因为地图功能会检查文档类型是否表示“费用”。如果它这样做了,它调用emit将“X”和“amount”添加到索引中,从那里可以查询以查找某物或某人。[4] 你能分享你的GET查询吗?@sweetiewill谢谢你的关注。可能是索引吗?如何清除此视图的索引?此外,我还为您的上述问题添加了答案。Couchbase Lite的版本和平台是什么?(例如,iOS为1.1,.NET/Xamarin为1.1.1,等等)您似乎做的每件事都是正确的,所以我想不出为什么会得到陈旧的结果。您正在检查每个请求的响应状态,没有看到任何错误?@JensAlfke感谢您的关注。我用更多信息更新了我的问题。正如你所看到的,我一步一步地检查了一切,但仍然没有骰子。谢谢你@jens alfke,但事实并非如此。我的视图是通过我自己对手机上运行的CouchBaseLite服务器的REST调用创建的。我的意思是我无法检索设计文档的
\u rev:1……
版本,因为我不知道它的修订id。
PUT /kittydb/_design/expenses?rev=7-6f979706f38acce9c7db380fba8565e4 HTTP/1.1
Host: 127.0.0.1:5800
Connection: close
User-Agent: Paw/2.2.2 (Macintosh; OS X/10.11.2) GCDHTTPRequest
Content-Length: 350

{
  "name": "expenses",
  "language": "javascript",
  "views": {
    "contact_parts_for_group": {
      "map": "function (doc){ if(doc.type=='expense'){ var i,len,part,ref;  ref=doc.parts; for(i=0,len=ref.length;i<len;i++){ part=ref[i]; var amount=part.contact==doc.expense_by?-1*part.amount:part.amount; emit('Hello SO', 'Overflow');}}}"
    }
  }
}
HTTP/1.1 201 Created
Location: http://127.0.0.1:5800/kittydb/_design/expenses
Content-Type: application/json
Server: CouchbaseLite 1.1 (unofficial)
Etag: "8-3ae4b6ff37b936657ca23acb8d836619"
Accept-Ranges: bytes
Date: Wed, 20 Jan 2016 21:57:03 GMT
Transfer-Encoding: chunked

{"id":"_design\/expenses","rev":"8-3ae4b6ff37b936657ca23acb8d836619","ok":true}