【问题标题】:Querying couchbase by passing parameter通过传递参数查询couchbase
【发布时间】:2015-07-30 08:50:56
【问题描述】:

我有以以下格式存储的 couchbase 报告文档:

{
   "agree_allowed":true,
   "assigned_by":"",
   "assigned_to":"",
   "closed":[

   ],
   "comments_allowed":true,
   "details":"Test",
   "email":"",
   "status":"In Progress",
   "subscribed":{
      "user_cfd29b81f0263a380507":true,
      "user_cfd29b81f0263a380508":true,
      "user_cfd29b81f0263a380509":true,
      "user_cfd29b81f0263a3805010":true
   },
   "summary":"Test",
   "time_open":0,
   "timestamp":"2015-07-17T15:34:30.864Z",
   "type":"report",
   "user_id":"user_cfd29b81f0263a380507",
   "username":"test17"
}

json 包含订阅的字段,它是关注报告的 user_id 列表。 问题是如果订阅字段包含 user_id,我必须发出报告文档,如果我通过 user_id ='user_cfd29b81f0263a380507' 作为关键参数传递。我想知道如何使用 user_id 在视图中进行比较

这是我写的代码:-

function map(doc, meta) {
        if (doc.type == 'report' && doc.subscribed) {
            for (var user_id in doc.subscribed) {
                emit(doc.user_id, doc);
            }

        }
    }

但它没有返回预期的结果。 谁能帮忙。

【问题讨论】:

  • 你能用你得到的输出更新问题吗?
  • 不太确定您要达到的目标。也许你可以举个例子?另外 - 不要将整个文档作为值发出。要么发出它的名字(然后得到它),要么使用“附加文档”选项将文档附加到结果中。通过发出文档,您正在浪费存储空间。
  • 我想报告订阅该报告的所有数据。所以我只是像这样改变发射(订阅者,文档)。这样可以吗?

标签: couchbase couchbase-view


【解决方案1】:

如果我理解您的问题,我认为您希望能够查询已订阅的用户。

如果是这种情况,视图代码是错误的,它提交的是doc.user_id,而不是user_id,这是您在循环中分配值但从不使用的变量。无论如何,我认为最好使用不同的名称以避免混淆。

function map(doc, meta) {
        if (doc.type == 'report' && doc.subscribed) {
            for (var subscriber in doc.subscribed) {
                emit(subscriber);
            }
        }
    }

要查询已订阅的用户,您可以使用key=user_cfd29b81f0263a380507。结果是:

{
  "total_rows": 4,
  "rows": [
    {
      "id": "docs",
      "key": "user_cfd29b81f0263a380507",
      "value": null
    }
  ]
}

【讨论】:

  • 你有我的问题。但我想报告订阅该报告的所有数据。所以我只是像这样改变发射(订阅者,文档)。这个可以吗?在 json 响应中,我得到了 _sync 数据,它太多了,有什么办法可以从结果中删除 _sync 数据?
  • W.R.T emit(subscriber,doc) 你应该在问题中看到@FuzzyAmi 评论。随着负载的增加,发出整个文档会减慢速度。 SDK 具有帮助函数来通过托管缓存获取整个文档。这会快得多。您使用的是哪个 SDK?
  • 我没有使用任何SDK,我通过python代码编写视图和访问,这是最好的方法吗?还是我应该使用 Python SDK
猜你喜欢
  • 1970-01-01
  • 2020-01-01
  • 1970-01-01
  • 2017-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-29
  • 2018-09-27
相关资源
最近更新 更多