Domanda

Ho un documento utente che ha un campo di gruppo. Questo campo è un array degli identificativi di gruppo. Vorrei scrivere una vista che ritorna (groupid come chiave) -> (serie di documenti utente come val). Questa operazione di mappatura sembra un buon inizio.

function(doc)
{
  var type = doc.type;
  var groups = doc.groups;
  if(type == "user" && groups.length > 0)
  {
    for(var i = 0; i < groups.length; i++)
    {
      emit(groups[i], doc);
    }
  }
}

Ma c'è ovviamente qualcosa di molto sbagliato con il mio tentativo di ridurre:

function(key, values, rereduce)
{
  var set = [];
  var seen = [];
  for(var i = 0; i < values.length; i++)
  {
    var _id = values[i]._id;
    if(seen.indexOf(_id) == -1)
    {
      seen.push(_id);
      set.push(values[i]);
    }
  }
  return set;
}

Io corro CouchDB 0.10dev. Qualsiasi aiuto apprezzato.

È stato utile?

Soluzione

La risposta a questo dopo aver controllato sul IRC CouchDB è che non è necessario ridurre per questo a tutti. Basta fornire una chiave = groupId, qualcosa di simile al seguente:

http: // localhost: 5984 / somedb / _design / bygroup / _Vedi / all? chiave = 2

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top