couchDB - 如何显示超过 key/value?

couchDB - how to display more than key/value?

我完全陷入了我的 RDBMS 思维方式,并且有一段时间通过有限的教程和指南来了解 noSQL

我在 cloudant 中创建了一个数据库 bookmarks 并创建了两个这样的文档:

{
  "_id": "3d609bd2689639afc2520f17d8f4c883",
  "_rev": "2-7227c3e1350f2d4f67f62f830b3f331e",
  "title": "bing homepage",
  "url ": "http://www.bing.com",
  "tags": [
    "search",
    "public"
  ],
  "dateadded": [
    2015,
    5,
    6
  ]
}

{
  "_id": "79cd702a5e23b80f09664862b5cbb918",
  "_rev": "1-f4428cbc76b31ec93a2b438cb6de6bb8",
  "title": "google homepage",
  "url ": "http://www.google.com",
  "tags": [
    "search",
    "private"
  ],
  "dateadded": [
    2015,
    5,
    7
  ]
}

然后我创建了一个这样的视图文档:

function (doc) {
      emit(doc.title, doc.url, doc.tags);
}

我希望得到一个包含我在 map 函数中指定的三个属性的结果,但我却得到了这个:

{"total_rows":2,"offset":0,"rows":[
   {"id":"3d609bd2689639afc2520f17d8f4c883","key":"bing homepage","value":null},
   {"id":"79cd702a5e23b80f09664862b5cbb918","key":"google homepage","value":null}
]}

我有两个问题:

  1. 为什么我的值为空?我删除了 doc.tags 想法也许我只能指定一个键和值,但即使那样它仍然 returns doc.url as value:null
  2. 如何让结果数组中的对象包含我在 map 函数中发出的相同属性?

1. 你的 "url -> " 后面有一个 space。删除它,它将起作用。

2. emit 仅接受 2 个参数,但您可以执行以下操作:

function(doc) {
  emit(doc.title, [doc.url, doc.tags]);
}

甚至更好:

function(doc) {
  emit(doc.title, {"url": doc.url, "tags": doc.tags});
}

第一个视图会给你:

{"total_rows":2,"offset":0,"rows":[
  {"id":"86d091d6ac800d27a6fb388a0900113d","key":"bing homepage","value":["http://www.bing.com",["search","public"]]},
  {"id":"86d091d6ac800d27a6fb388a09001692","key":"google homepage","value":["http://www.google.com",["search","private"]]}
]}

第二个:

{"total_rows":2,"offset":0,"rows":[
  {"id":"86d091d6ac800d27a6fb388a0900113d","key":"bing homepage","value":{"url":"http://www.bing.com","tags":["search","public"]}},
  {"id":"86d091d6ac800d27a6fb388a09001692","key":"google homepage","value":{"url":"http://www.google.com","tags":["search","private"]}}
]}