1

我有包含关键字列表的文档。如何查询以便搜索例如关键字belafleck仅返回具有这两个关键字的文档:

{
    "_id": "track/bela-fleck/big-country",
    "title": "Big Country",
    "artist": "Bela Fleck",
    "keywords": ["bela", "fleck", "big", "country"]
}
4

2 回答 2

2

这可以通过 Mango 查询来完成。首先,在字段上创建索引keywords

{
   "index": {
      "fields": [
         "keywords"
      ]
   },
   "name": "keywords-index",
   "type": "json"
}

然后,查询使用$elemMatch查找数组中匹配每个关键字的项目,并$and查找匹配所有关键字的文档:

{
   "selector": {
      "keywords": {
         "$and": [
            {
               "$elemMatch": {
                  "$eq": "bela"
               }
            },
            {
               "$elemMatch": {
                  "$eq": "fleck"
               }
            }
         ]
      }
   }
}

请注意,此方法不使用索引在数组内部进行搜索。

于 2018-08-04T11:29:43.253 回答
0

像这样的东西可以工作:

function map(doc) {
  // sort by each keyword
  for (var k in doc.keywords) {
    emit(doc.keywords[k], null);
  }      
}

db.query(map).then(function (result) {
  // handle result
}).catch(function (err) {
  console.log(err);
});

...但我还没有测试过!这也会进行完整的数据库扫描,因此为了提高效率,您应该在设计文档中创建一个视图,如Map/Reduce 的 PouchDb API 文档中所述。希望这可以帮助。

更新... CouchDb 指南也有一些可能有帮助的详细示例。

于 2018-08-03T17:16:28.103 回答