J'essaie actuellement de trier et trier par une clé avec trois valeurs. Mais Commençons par la structure du document:CouchDB interrogation et filtrage par trois touches indexées
{
_id: "DOCIDGOESHERE01",
type: "MESSAGE",
date: "2011-08-24 06:49:02",
author: "USERIDGOESHERE01",
receiver: ["USERIDGOESHERE02", "USERIDGOESHERE03"],
message: "ok let's do this"
}
L'objectif principal est d'interroger CouchDB pour les messages envoyés par les utilisateurs sélectionnés à un utilisateur spécifique et de les commander à la date. Certains messages n'ont pas de récepteur qui indique qu'ils sont publics et peuvent être lus par n'importe qui.
La fonction carte J'utilise actuellement ressemble à ceci:
function map(doc) {
if(doc.receiver.lenth==0)
emit([doc.date, null, doc.author], doc._id);
else for(var idx in doc.receiver)
emit([doc.date, doc.receiver[idx], doc.author], doc._id);
}
Lorsque vous interrogez l'interface HTTP CouchDB i tryed demandes comme
HTTP GET xxx/messages?key=[{}, "USERIDGOESHERE02", {}]
ou
HTTP POST xxx/messages
{
keys: [
[{}, "USERIDGOESHERE02", "USERIDGOESHERE01"],
[{}, "USERIDGOESHERE02", "USERIDGOESHERE03"],
[{}, "USERIDGOESHERE02", "USERIDGOESHERE04"],
]
}
mais tous n'a pas abouti à la liste des documents que je voulais produire. Avez-vous des suggestions pour cette tâche? Ou est-il impossible de construire de tels résultats filtrés avec couchDB? Merci beaucoup d'avance!
Merci pour votre réponse, la première chose que j'ai dû réaliser en étant nouveau à couchDB est qu'il n'y a pas de caractères génériques comme @ user787145 dit. L'autre chose que j'ai apprise est le fait que les vues peuvent être lues d'un index de départ à un index de fin donné sans filtrer certains documents hors de la liste une fois que les vues sont créées. Cela conduit à la conclusion que la vue elle-même doit inclure les caractéristiques de filtrage. De toute façon, il semble que votre troisième approche soit la plus adaptée à mon cas d'utilisation. – sics