嗯......我不确定你到底需要什么,但这就是我的理解。您有一个称为会话的数据集合,然后还有另一个称为过滤器的数据集合。然后,您想要从会话中组装另一个数据集合,但使用过滤器数据从会话中选择特定数据。如果这是正确的,有几种方法可以做到这一点,这是其中之一:
假设您有 30 个左右的会话文档。它们各有两个属性:位置和起始纪元。例如:
{
"_id" : "f80hqwfe8nfaodnia9dgs8n9",
"location" : "Seattle",
"start-epoch" : "1336608413",
"type" : "session"
}
Or...
{
"_id" : "f8fsdnio345235aodnia9dgs8n9",
"location" : "New York",
"start-epoch" : "1236630174",
"type" : "session"
}
然后你有一些过滤器,例如:
{
"_id" : "f80hqwfe8nfaodnia9dgs8n9",
"location" : "New York",
"type" : "filter"
}
Or...
{
"_id" : "f80hqwfe8nfaodnia9dgs8n9",
"start-epoch" : "1336608413",
"type" : "filter"
}
您可以将所有会话拉到一个视图中:
"sesssions": {
"map": "function (doc) {
if (doc.type === "session") {
emit(doc.start-epoch, doc);
}
}"
然后,将所有过滤器拉到一个视图中(您可以即时更新):
"filters": {
"map": "function (doc) {
if (doc.type === "filter") {
emit(doc.type, doc);
}
}"
然后我会在 Nodejs 中组装我的最终“视图”。我会对数据库的过滤器视图发出请求,或者根据需要创建一个新的过滤器,并将其存储在变量中,例如过滤器或过滤器。然后我会再次调用数据库的会话视图,并将该数据提取到变量中,例如会话。
这里有一点补充说明。您需要调用视图(假设您存储了 couch 返回到 var 视图中的 json 对象),然后将 view.rows 存储到会话变量中,这将为您提供一个会话数组,如下所示:
[
{
"_id" : "f80hqwfe8nfaodnia9dgs8n9",
"location" : "Seattle",
"start-epoch" : "1336608413",
"type" : "session"
},
{
"_id" : "f8fsdnio345235aodnia9dgs8n9",
"location" : "New York",
"start-epoch" : "1236630174",
"type" : "session"
}
]
然后就做
var myFinalView = sessions.forEach(function (session) {
if (filter.location !== session.location) {
// session.splice or delete session
}
return;
})
然后 myFinalView 将是您需要的 JSON 对象。我希望这是有道理的。如果需要的话请让我详细说明。