有没有办法在 CouchDB 中过滤子文档?

Is there a way to filter subdocuments in CouchDB?

我想从 CouchDB 的数据库中过滤子文档。数据库中的示例文档为:

{
    "Things": {
        "Thing:1": {
            "Number":1
            "Type": "TI"
        },
        "Thing:2": {
            "Number":2,
            "Type": "TI"
        }
    },
    "Type": "TD"
}

是否可以创建一个与此类似的过滤子文档的视图?

for(key in Object.keys(Things)) {
    return Things[key].Number == 2;
}

是的,使用地图功能很容易。例如

function (doc) {
   Object.keys(doc.Things).forEach(function(key) {
    if(doc.Things[key].Number === 2) emit(doc._id, 1);
   });
}

这适用于 CouchDB 2.3。 Fauxton 使创建和测试视图变得超级容易。

视图 _design/thing/_view/thing

的设计文档看起来像这样
{
  "_id": "_design/thing",     
  "views": {
    "thing": {
      "map": "function (doc) {\n   Object.keys(doc.Things).forEach(function(key) {\n    if(doc.Things[key].Number === 2) emit(doc._id, 1);\n});\n\n}"
    }
  },
  "language": "javascript"
}