2017-10-04 5 views
0

Je suis tout à fait sûr que je veux être averti avec le document inséré par chaque insertion dans le canapé db.Couchdb obtenir le document modifié avec chaque notification de changement

quelque chose comme ceci:

http://localhost:5058/db-name/_chnages/_view/inserted-document 

J'aime la réponse à quelque chose comme ce qui suit:

{ 
    "id":"0552065465", 
    "name":"james" 
    . 
    . 
    . 
} 

Reconnexion à la base de données pour donner le document réel par chaque notification peut provoquer des problèmes de performance . Puis-je définir une vue qui renvoie le document réel à chaque modification?

+0

Pour être clair, vous souhaitez recevoir des modifications à partir de l'insertion de nouveaux documents uniquement? Ou, vous voulez regarder les changements pour un document spécifique? –

+0

@Alexis Côté: Je veux obtenir le 'DOCUMENT' inséré. pas les 'Id' et' rev' du document inséré. – Mohsen

Répondre

2

Il y a 3 façons possibles de définir si un document vient d'être ajouté:

  1. Vous ajoutez un champ d'état à votre document avec un statut spécifique pour les nouveaux documents.
  2. Si la révision commence par 1- mais n'est pas 100% précise selon this si vous effectuez une réplication.
  3. Dans la réponse aux modifications, vérifiez si le nombre de révisions du document est égal à un. Si oui, cela signifie qu'il vient d'être ajouté (meilleure solution IMO)

Si vous souhaitez interroger le noeud final _changes et obtenir directement les documents nouvellement insérés, vous pouvez utiliser l'approche # 1 et utiliser une fonction de filtre uniquement renvoie les documents avec status = "new".

Sinon, vous devriez utiliser l'approche # 3 et filtrer les réponses _changes localement. Par exemple: votre application recevrait toutes les modifications et ne traiterait que les documents dont le nombre de révisions est égal à 1.

Et comme vous l'avez mentionné, vous voulez recevoir le document, pas seulement le _id et le _rev. Pour ce faire, vous pouvez simplement ajouter le paramètre de la requête: include_docs=true