基本问题
我有一些大型但逻辑组织良好的文档 - 并且只想对单个文档的一个子部分执行更新。
例子
给定这个简单的文档:
_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/