我有包含关键字列表的文档。如何查询以便搜索例如关键字bela
并fleck
仅返回具有这两个关键字的文档:
{
"_id": "track/bela-fleck/big-country",
"title": "Big Country",
"artist": "Bela Fleck",
"keywords": ["bela", "fleck", "big", "country"]
}
我有包含关键字列表的文档。如何查询以便搜索例如关键字bela
并fleck
仅返回具有这两个关键字的文档:
{
"_id": "track/bela-fleck/big-country",
"title": "Big Country",
"artist": "Bela Fleck",
"keywords": ["bela", "fleck", "big", "country"]
}
这可以通过 Mango 查询来完成。首先,在字段上创建索引keywords
:
{
"index": {
"fields": [
"keywords"
]
},
"name": "keywords-index",
"type": "json"
}
然后,查询使用$elemMatch
查找数组中匹配每个关键字的项目,并$and
查找匹配所有关键字的文档:
{
"selector": {
"keywords": {
"$and": [
{
"$elemMatch": {
"$eq": "bela"
}
},
{
"$elemMatch": {
"$eq": "fleck"
}
}
]
}
}
}
请注意,此方法不使用索引在数组内部进行搜索。
像这样的东西可以工作:
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 指南也有一些可能有帮助的详细示例。