Я думаю, что то, что я пытаюсь сделать здесь, может быть невозможным, но это стоит того.
У меня есть два типа документов: Operator
и Event
.
В приведенном ниже примере я посылаю 3 клавиши.
[place_id, operator_id, zone_name]
operator_id
и zone_name
являются общими полями в обоих документах. Вот как я хочу сделать соединение между двумя типами документов.
То, что я хочу получить, это place_id
как первый ключ от первого emit () и Event
doc._id
от второго emit ().
Таким образом, я могу указать стартовую клавишу как place_id
Я хочу получить список Event._id
с.
function(doc) {
if(doc.doc_type == 'Operator') {
for(var i in doc.zones) {
for(var ii in doc.zones[i].origs) {
if(doc.zones[i].origs[i])
emit([doc.zones[i].origs[i], doc._id, doc.zones[i].name], null);
}
}
} else if (doc.doc_type == 'Event') {
for(var i in doc.rates) {
if(doc.rates[i].zone) {
emit([0, doc.operator_id, doc.rates[i].zone], doc._id);
}
}
}
}
Проблема в том, что соединение не будет работать с этим первым значением 0 во втором emit ();
Я пытался выдать ключи [operator_id, zone_name]
, которые позволяют объединению работать, но функция redu () принимает значение long и выдает ошибку, поскольку список Event._id
s увеличивается до long.
Мне, вероятно, придется разбить это на два отдельных запроса, но я надеюсь изучить другой подход, который мне не хватает.