更新couchbaselite设计文档不会改变我的查看结果

时间:2016-01-18 20:39:12

标签: couchbase-lite couchbase-view

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

我已经创建了一些设计文档,但是当我尝试更新这些文档时,我运行我的REST客户端(我用于调试的单独应用程序)时没有得到新的结果。当我GET设计文档更新后它有一个新的_rev时,新的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()
    }
  }
};

我将此信息与正确的_rev一起发送到服务器作为json正文:JSON.stringify(designDoc) 0.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);}}}"}}}

0.2。我使用我目前开发的应用程序原型的界面填充数据库

0.3。我不确定你的意思。

0.4。这是get:

GET /kittydb/_design/expenses/_view/contact_parts_for_group HTTP/1.1
Host: 127.0.0.1:5800
Connection: close
User-Agent: Paw/2.2.2 (Macintosh; OS X/10.11.2) GCDHTTPRequest

有关评论的更多信息:

我正在使用适用于iOS的CouchbaseLite社区版1.1.1版。我将模拟器作为带有iOS 9.2的iPhone 6运行。

我制作了一些屏幕截图,以说明更多内容:

first result

我不知道如何检索与此相关的地图功能,但它似乎做的是:

emit([doc.group_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');}}}"
    }
  }
}

现在应该做的是: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}

现在我再次运行get请求:

nothing changed

没有改变......

当我使用'type = expense'创建一个新文档时,我会得到相同的结果,只有更多。

1 个答案:

答案 0 :(得分:0)

  

我不知道如何检索与此相关的地图功能

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

我对React-Native一无所知。是否(如名称所示)应用程序中的本机代码?如果是,请寻找[CBLView setMapBlock: ...]的电话。