2017-03-08 4 views
1

J'essaie d'ajouter (alias push to existing array) dans le document couchDB. Tous les commentaires sont grandement appréciés.Modification/mise à jour des objets imbriqués dans les documents CouchDB (node.js)

J'ai un document intitulé "enquête " dans ma base de données appelée "database1". J'ai "enquêtes" comme un ensemble de tableaux qui se compose d'objets qui a des informations sur chaque enquête.

Mon objectif est de mettre à jour mon document "survey". Ne pas remplacer mon tableau, mais ajouter un nouvel objet au tableau existant. J'ai utilisé "nano-couchdb" et "node-couchdb", mais n'a pas pu trouver un moyen de contourner le problème. J'ai été en mesure de mettre à jour mes "enquêtes", mais il remplacerait le tout, ne gardant pas les objets existants dans le tableau.

1) En utilisant Nano-CouchDB:

db.insert({ _id, name }, "survey", function (error, resp) { 
    if(!error) { console.log("it worked") 
    } else { 
    console.log("sad panda")} 
}) 

2) En utilisant CouchDB-noeud:

couch.update("database1", { 
    _id: "survey", 
    _rev:"2-29b3a6b2c3a032ed7d02261d9913737f", 
    surveys: { _id: name name: name } 
) 

Ceux-ci fonctionnent bien avec l'ajout de nouveaux documents à une base de données, mais ne fonctionne pas avec l'ajout des choses à des documents existants.

{ 
     "_id": "survey", 
     "_rev": "2-29b3a6b2c3a032ed7d02261d9913737f", 
     "surveys": [ 
     { 
      "_id": "1", 
      "name": "Chris" 
     }, 
     { 
      "_id": "2", 
      "name": "Bob" 
     }, 
     { 
      "_id": "1", 
      "name": "Nick" 
     } 
     ] 
    } 

Je veux que ma demande de travailler comme il le ferait pour

"surveys.push({_id:"4",name:"harris"}) 

chaque fois que de nouvelles données vient de ce document.

Répondre

0

Votre modèle de données doit être amélioré. Dans CouchDB, cela n'a pas beaucoup de sens de créer un énorme document "sondages", mais de stocker chaque enquête dans un document séparé. Si vous avez besoin de toutes les enquêtes, juste create a view for this. Si vous utilisez CouchDB 2.0, vous pouvez également interroger des documents d'enquête via Mango.

Vos documents pourrait ressembler à ceci:

{ 
    "_id": "survey.1", 
    "type": "survey", 
    "name": "Chris" 
} 

Et votre fonction de carte ressembleraient que:

function (doc) { 
    if (doc.type === 'survey') emit(doc._id); 
} 

Supposons que vous enregistré ce point de vue 'enquêtes' dans la conception doc « _design/documentLists ', vous pouvez l'interroger via http://localhost:5984/database1/_design/documentLists/_view/surveys.