0

我在 CouchDB 中存储了以下文档:

{
  "_id":"1",
  "_rev":"1-e3ff3eb51ccf90e0446ef086fcc6a06c",
  "sub_name":"A01",
  "type":"Test",
  "name":"A",
  "pos":828288
}{
  "_id":"2",
  "_rev":"1-e3ff3eb51ccf90e0446ef086fcc6a06c",
  "sub_name":"A02",
  "type":"Test",
  "name":"A",
  "pos":828288
}{
  "_id":"3",
  "_rev":"1-ef83655c51f64daa4c074fed9beb8234",
  "sub_name":"B01",
  "type":"Test",
  "name":"B",
  "pos":171878
}{
  "_id":"4",
  "_rev":"1-ef83655c51f64daa4c074fed9beb8234",
  "sub_name":"B02",
  "type":"Test",
  "name":"B",
  "pos":171878
}{
  "_id":"5",
  "_rev":"1-52b91ba1577a11bf410999ceb2577206",
  "sub_name":"C01",
  "type":"Test",
  "name":"C",
  "pos":871963
}{
  "_id":"6",
  "_rev":"1-52b91ba1577a11bf410999ceb2577206",
  "sub_name":"C02",
  "type":"Test",
  "name":"C",
  "pos":871963
}{
  "_id":"7",
  "_rev":"1-807f46b501b237a6e0f2ba71ffd7f194",
  "sub_name":"D01",
  "type":"Test",
  "name":"D",
  "pos":1932523
}{
  "_id":"8",
  "_rev":"1-807f46b501b237a6e0f2ba71ffd7f194",
  "sub_name":"D02",
  "type":"Test",
  "name":"D",
  "pos":1932523
}

更新 我想通过页面上的选择框为用户提供选择不同文档的选项,其中可以选择typenamesub_name。但是,我找不到任何示例来动态进行查询 e。像这样:

function(doc, type, name, sub_name) {
  if (doc.type == type && doc.name == name && doc.sub_name == sub_name) {
    emit(doc._id, doc.pos);
  }
}

我是否要为所有 doc.type、doc.name 和 doc.sub_name 组合创建一个类似于以下视图的单独视图,或者有更好的方法吗?

function(doc) {
  if (doc.type == "Test" && doc.name == "A" && doc.sub_name == "A01") {
    emit(doc._id, doc.pos);
  }
}

function(doc) {
  if (doc.type == "Test" && doc.name == "A" && doc.sub_name == "A02") {
    emit(doc._id, doc.pos);
  }
}

function(doc) {
  if (doc.type == "Test" && doc.name == "B" && doc.sub_name == "B01") {
    emit(doc._id, doc.pos);
  }
}
...
4

1 回答 1

2

您无法以您尝试的方式动态查询 CouchDB - 视图是在索引时(即创建或更新文档时)构建的,并且只能通过传递键或键范围来查询。不可能基于任何给定的文档属性进行动态查询。

你可以做的是发出一个复合键:

function(doc) {
    emit([doc.type, doc.name, doc.sub_name], doc.pos);
}

然后,您可以通过传递一个数组作为键来查询视图:

/.../my_view?key=["Test","B","B01"]
于 2014-10-17T23:33:19.087 回答