我们正在使用 couchdb 文档并使用 ektorp (Java) 来查询数据库。
我有一个具有以下结构的 couchdb 文档-
{
"type": "UserRecord",
"name": "Matt",
"age": "32",
"userData": [
{
"key": "city",
"value": "Bombay"
},
{
"key": "country",
"value": "India"
},
{
"key": "pin",
"value": "400002"
}
]
}
我们有一个按城市名称搜索的新要求。例如:搜索所有包含 city 的文档。
我们通过编写如下视图函数来做到这一点:
function (doc) {
if (doc.type == 'UserRecord' && doc.userData)
emit(doc.userData[0].value, null);
}
这会给我所有的城市名称值,我们可以从中查询我们想要的特定城市名称。我们可以通过在 for 循环中运行所有数组元素并检查其键为“city”的元素并获取相应的值来改进这一点。
但是,这似乎是一种非常密集的搜索方式。太费时间了。有一个更好的方法吗?
我无法更改“userData”数组的结构,因为它已经使用了很长时间并且无法更改。我可以编写更有效的查询来获取具有给定城市名称的文档吗?例如:搜索居住在纽约的人的所有用户记录。
我正在考虑在“userData”字段顶部添加新字段 - 城市和我们希望能够搜索的任何其他参数。这将是一个更快的查找。然而,我们试图避免对文档结构进行此类编辑。所以如果有更好的方法,请告诉我。
谢谢,欧姆