tec*_*dog 3 mysql loops for-loop couchdb
couchdb可以循环吗?
假设我有一个兴趣数据库,有 3 个字段 subject1、subject2、subject3。例如,猫、营养、头发或空间、望远镜、光学等。
一个人 (A) 有 10 个兴趣,每个兴趣由 3 个字段组成。
另外 10 个人 B、C、D...有 10 个兴趣,每个兴趣由 3 个主题组成。
当人 A 登录时,我希望系统搜索所有具有匹配兴趣的人。
在 javascript 中,我通常会循环遍历所有兴趣,然后使用两个循环找到匹配的兴趣。然后将匹配项存储在用户的另一个数据库中,例如“matchinginterests”。
与 mysql 相比,在 couchdb 中是否有任何简单的方法可以做到这一点——这看起来非常复杂。
谢谢,丹
我想我明白你在问什么。使用 Map/Reduce 答案非常简单。
假设您有以下人员文档:
{
"name": "Person A",
"interests" [ "computers", "fishing", "sports" ]
}
{
"name": "Person B",
"interests" [ "computers", "gaming" ]
}
{
"name": "Person C",
"interests" [ "hiking", "sports" ]
}
{
"name": "Person D",
"interests" [ "gaming" ]
}
Run Code Online (Sandbox Code Playgroud)
您可能希望将您的密钥作为兴趣发出,并将值作为该人的姓名(或_id)。
function (doc) {
for (var x = 0, len = doc.interests.length; x < len; x++) {
emit(doc.interests[x], doc..name);
}
}
Run Code Online (Sandbox Code Playgroud)
您的查看结果将如下所示:
要获取对计算机感兴趣的人员列表,您只需key="computers"作为查询字符串的一部分发送即可。
如果你想在你的地图中添加一个reduce函数,你可以简单地使用_count(使用编译的reduce函数的快捷方式),你可以检索所有具有特定兴趣的人的计数,你甚至可以使用它来限制你感兴趣的人查询以建立您的关系。