使用nodejs在沙发数据库中添加附件到文档

时间:2014-04-26 06:33:22

标签: node.js couchdb couchdb-nano

我想更新couchdb中的现有文档。我有一个图像,我想将它添加到数据库中的现有文档,而不会丢失previus字段。

我正在使用带有nano的nodejs。

坦克,这使我处于正确的方向。最后,我这样做:

db.get(id,{ revs_info: true }, function (error, objeto) {
    if(error)
       console.log('wrong id');
fs.readFile('image.jpg', function(err, data) 
    {
     if (!err) 
     {
        db.attachment.insert(id, 'imagen.jpg', data, 'image/jpg',{ rev: objeto._rev}, function(err, body) { 
             if (!err)
                console.log(body);
        });
     }
 });
 });

1 个答案:

答案 0 :(得分:2)

您的问题对于具体问题并不是很清楚。所以这里只是一些关于更新文档的一般指导。

  • 在设计数据库时,请确保设置ID而不是允许couchdb对其进行编辑。这样,您可以在更新文档时直接访问该文档。
  • 更新时,您需要证明您正在更新文档的最新版本。我通常会首先检索文档,并确保您拥有最新的文档' _rev'在您要插入的文件中。
  • 最后,如果其他进程在检索和更新文档之间编辑了文档,则更新可能会失败。因此,您应该在插入中捕获失败并重复该过程,直到成功为止。

话虽如此,有两种方法可以存储图像:

  1. 作为附件:我相信nano支持attachment.insert()attachment.get()功能。
  2. 作为参考:我通常宁愿将图像存储在其他地方,只需存储url或文件路径即可访问它们。我没有太多使用nano,但相信你可以通过以下方式做到这一点。

    doc = db.get(docname); // get the document with all existing elements 
    doc['mynewimage'] = myimageurl; // update the document with the new image
                                    // this assumes it's a dictionary
    db.insert(doc); // inserts the document with the correct _id (= docname)
                    // and _rev