如何针对 couchdb 视图优化此 SQL 查询?
SELECT * FROM db WHERE user = '$userid' OR userFollowed = '$userid'
couchdb 数据库包含以下文档结构:
_id
user
userFollowed
这是因为一个用户可以关注另一个用户,反之亦然,我的范围是让用户 A 的所有关注者都关注该用户,例如:
A跟随B
B跟随A
在这个例子中,我需要获得 B,确保两个用户都是追随者......我知道解释和理解很复杂,但我会尝试使用 node.js 和 cradle 做的事情。
视图地图:
function (doc) {
emit(doc.user, doc.userFollowed)
}
node.js 代码:
db.view("followers/getFollowers", function(err, resp) {
if (!err) {
var followers = [];
resp.forEach(function(key, value, id) {
var bothFollow = false;
if (key == userID) {
if (followers.indexOf(value) == -1) {
resp.forEach(function(key, value, id) {
if (value == userID)
bothFollow = true;
});
if (bothFollow)
followers.push(value);
}
} else if (value == userID) {
if (followers.indexOf(key) == -1) {
resp.forEach(function(key, value, id) {
if (key == userID)
bothFollow = true;
});
if (bothFollow)
followers.push(key);
}
}
});
console.log(followers);
}
});
因此,在代码中,我首先检查 A 或 B 值是否与其他用户相对应,然后检查另一个循环是否存在将关注者放入列表的关系
所有这些代码都有效,但我认为这不是正确的程序,也许我错了什么:(你能帮帮我吗?