我有一些包含关键字列表的文档。如何进行查询,例如搜索关键字bela
和fleck
仅返回同时具有这两个关键字的文档:
{
"_id": "track/bela-fleck/big-country",
"title": "Big Country",
"artist": "Bela Fleck",
"keywords": ["bela", "fleck", "big", "country"]
}
答案 0 :(得分:1)
这可以通过Mango查询来完成。首先,在@WebListener
字段上创建索引:
keywords
然后,使用{
"index": {
"fields": [
"keywords"
]
},
"name": "keywords-index",
"type": "json"
}
查询以找到与每个关键字匹配的数组中的项目,并使用$elemMatch
查询以找到与所有关键字匹配的文档:
$and
请注意,此方法does not use indexes用于在数组内部进行搜索。
答案 1 :(得分: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);
});
...但是我还没有测试!这也会进行完整的数据库扫描,因此,为了提高效率,您应该按照PouchDb API documentation for Map/Reduce中的描述在设计文档中创建一个视图。希望这会有所帮助。
更新... the CouchDb guide还提供了一些详细的示例,可能会有所帮助。