通过传递参数查询couchbase

时间:2015-07-29 15:25:20

标签: couchbase couchbase-view

我正在使用以下格式存储的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);
            }

        }
    }

但它没有返回预期的结果。 任何人都可以提供帮助。

1 个答案:

答案 0 :(得分: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
    }
  ]
}