【发布时间】:2017-08-16 17:20:42
【问题描述】:
在 CouchDB 中,我想同时发出 country 类型和 city 类型的对象。这是否可能仅在一个函数中实现?
通过链接文档,我可以发出 {_id:doc.xxx} 的对象值,如下所示:
function(doc) {
if (doc.cities) {
for (var i in doc.cities) {
emit(doc.name, {_id: doc.cities[i]});
}
}
}
下面的函数是我的建议,但它不起作用,因为第二个 if 部分永远不会到达。
function(doc) {
if (doc.type == 'country') {
emit(doc.name, null);
} else if (doc.cities) {
for (var i in doc.cities) {
emit(doc.name, {_id: doc.cities[i]});
}
}
}
文件:
// Country
{
"_id": "country.123",
"name": "France",
"type": "country",
"cities": [
"city.123"
]
}
// City
{
"_id": "city.123",
"name": "Paris",
"type": "city",
}
更新 1
我尝试按照 Dominic 的建议删除 else if。不幸的是,现在什么都没有发出。
function(doc) {
if (doc.type == 'country') {
emit(doc.name, null);
for (var i in doc.cities) {
emit(doc.name, {_id: doc.cities[i]});
}
}
}
【问题讨论】:
-
如果你想同时访问两个代码路径,你需要
else if吗? -
从您的评论来看,似乎没有必要。好的。我尝试删除它,以便我首先发出我的国家/地区,然后 for-function 跟随并给我城市。那是计划,但根本没有发出任何东西。同样从您的评论来看,这应该是可能的吧?我现在不确定。
标签: javascript couchdb views map-function nosql