2017-03-08 8 views
1

couchDB文書に(別名、既存の配列へのプッシュ)を追加しようとしています。 ご迷惑をおかけして申し訳ございません。文書内の入れ子になったオブジェクトの編集/更新CouchDB(node.js)

私は「DATABASE1」と呼ばれる私のデータベース内の「調査」と呼ばれる文書を持っています。 私は、 "survey"を各調査の情報を持つオブジェクトからなる配列のセットとして持っています。

私の目標は、私の "survey"のドキュメントを更新することです。配列を置き換えずに、既存の配列に新しいオブジェクトを追加します。私は "nano-couchdb"と "node-couchdb"を使用しましたが、周りに道を見つけることができませんでした。私は "survey"を更新することができましたが、既存のオブジェクトを配列に保持しないで、全体を置き換えることになります。

1)ナノCouchDBの使用:CouchDBのノードを使用して

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

2):

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

これらは、データベースに新しいドキュメントを追加するとうまく動作しますが、追加では動作しません。既存の文書への詰め込み。

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

私は、新しいデータがこのドキュメントに入って来たときに私の要求は、それが

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

の場合と同じように仕事をしたいです。

答えて

0

データモデルを改善する必要があります。 CouchDBでは巨大な「調査」文書を作成するのには意味がありませんが、代わりに各調査を別々の文書として保存します。すべてのアンケートが必要な場合は、ただcreate a view for thisです。 CouchDB 2.0を使用している場合は、Mangoを介して調査文書を照会することもできます。

あなたの文書は、次のようになります。

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

そして、あなたのマップ機能は、次のようになります。

あなたがデザインドキュメントの「調査」「_design /として、このビューを保存したと仮定すると、
function (doc) { 
    if (doc.type === 'survey') emit(doc._id); 
} 

をあなたはhttp://localhost:5984/database1/_design/documentLists/_view/surveysでそれを問い合わせることができます。

関連する問題