编辑/更新文档中的嵌套对象CouchDB(node.js)

时间:2017-03-08 04:35:15

标签: node.js couchdb pouchdb couchdb-futon couchdb-nano

我试图在couchDB文档中添加(也就是推送到现有数组)。 非常感谢任何反馈。

我有一份名为" survey "在我的数据库中名为" database1 "。 我有" 调查"作为一组数组,由包含每个调查信息的对象组成。

我的目标是更新我的" 调查"文献。不替换我的数组,而是向现有数组添加新对象。我已经使用了" nano-couchdb "和" node-couchdb ",但无法找到解决方法。我能够更新我的" 调查",但它会取代整个事情,而不是将现有对象保留在数组中。

1)使用Nano-couchdb:

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

2)使用couchdb-node:

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"}) 

每当有新数据进入本文档时。

1 个答案:

答案 0 :(得分:0)

应该改进您的数据模型。在CouchDB中,创建一个巨大的调查"并不是很有意义。文档,而是将每个调查存储为单独的文档。如果您需要所有调查,只需create a view for this。如果您使用CouchDB 2.0,您还可以通过Mango查询调查文档。

您的文件可能如下所示:

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

你的地图功能看起来像那样:

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

假设您将此视图保存为'调查'在设计文档' _design / documentLists'中,您可以通过http://localhost:5984/database1/_design/documentLists/_view/surveys进行查询。