Couchbase - 在所有文档类型Foo中创建新属性,其值是从文档类型Bar获取的?

时间:2016-04-24 10:26:39

标签: couchbase bulkupdate database nosql

Foo: {
 id: 100,
 barId: 123, 
 startDate: "12/12/79", //new field to be added 
} ,    

Bar: { 
 id: 123,
 startDate: "12/12/79",
}

我们需要在所有文档类型'Foo'中创建一个新属性'startDate',其值取自文档类型'Bar'。

所有'Foo'文档都包含Bar的“外键”(一个名为'BarId'的字段)。

除了以编程方式检索和更新所有实体之外,最简单的方法是什么? (Couchbase版本是3.0)

3 个答案:

答案 0 :(得分:4)

I guess you mean some declarative solution resembling SQL UPDATE. Such a thing isn't available for CB 3, but since CB 4.1, N1QL has an UPDATE statement. Check http://developer.couchbase.com/documentation/server/4.1/n1ql/n1ql-language-reference/update.html.

答案 1 :(得分:4)

正如TAM所说,您可以使用Couchbase 4.1中N1QL的UPDATE语句执行此操作...但您使用的是3.0。

在Couchbase 3.x中,你最好的是写:

  1. 一个view,可让您获取Foo类型的所有文件的ID
  2. 使用SDK的脚本:
    1. 查询该视图
    2. 检索每个Foo doc
    3. Bar doc
    4. 的内容中获取Foo个ID
    5. 获取Bar doc
    6. 相应地更新Foo内容并在db
    7. 中保存(更新)Foor文档

答案 2 :(得分:1)

UPDATE对我来说并不合适,因为我需要执行某种类型的"加入"两种文件类型之间。但看起来Couchbase的MERGE声明正是我所需要的。

http://developer.couchbase.com/documentation/server/current/n1ql/n1ql-language-reference/merge.html

我们将升级到4.1,看看它是如何发展的。