node.js - CouchDB 部分/差异写入

标签 node.js couchdb express

基本问题

我有一些大型但逻辑组织良好的文档 - 并且只想对单个文档的一个子部分执行更新。

例子

给定这个简单的文档:

_id: 123456,
_rev: 3242342,
name: 'Stephen',
type: 'Person',
hobbies: [ 'sky-diving' ]

在我的应用程序中,我可能有一个 addHobbies 方法,它会使用一个只检索的 View :

_id: 123456,
_rev: 3242342,
hobbies: [ 'sky-diving' ]

这样它就可以向 hobbies 数组中添加一个额外的爱好,然后将这部分数据PUT 返回到文档中。

问题

据我了解,CouchDB [1.2] 不允许像这样的部分更新,因此我认为有必要在保存操作期间抓取整个文档,合并我的更改,然后 PUT 每次保存都会返回整个文档。

  • 还有其他方法可以做到这一点吗(我对 CouchDB 的功能有什么误解吗)?
  • 是否有任何库(我在 node.js 上使用 express)来处理这种操作?

最佳答案

你是对的。也就是说,事实上,文档数据库 的意思是: checkout 和 checkin 。

您可以创建(或使用)垫片代码来模拟您想要的东西,让您专注于重要的部分。在服务器端,您可以使用 update functions .

客户端有很多解决方案。

cradle.js 将使用 merge 方法为您提供伪部分更新。

If you only want to update one or more attributes, and leave the others untouched, you can use the merge() method:

db.merge('luke', {jedi: true}, function (err, res) {
    // Luke is now a jedi,
    // but remains on the dark side of the force.
});

https://github.com/cloudhead/cradle/

相关,对于 Node.js 也是 Transaction用于在 CouchDB 文档上执行任意原子事务。

关于node.js - CouchDB 部分/差异写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10570500/

相关文章:

mysql - ionic : sqLite & PouchDB or NoSQL

Node.js + express.js 和线程安全

html - 如何在 AWS Lambda 中将 HTML 转换为 PDF 或图像

ruby - 让 Ruby 与 Node.js 交互

node.js - 在 Nodejs Express 中运行 https 服务器时出现 ERR_SSL_PROTOCOL_ERROR 浏览器错误消息

javascript - 状态代码 304(Jade、Node、Express)

javascript - Node JS Express 未定义回调

javascript - 将 ExtJs Web 应用程序转换为桌面应用程序

javascript - CouchDB 查看搜索中的空白空间

javascript - PouchDB 检测未同步的文档