2
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)

4

3 回答 3

4

正如 TAM 所说,您可能可以使用N1QLCouchbase 4.1 中的 UPDATE 语句来做到这一点......但您使用的是 3.0。

在 Couchbase 3.x 中,最好的方法是编写:

  1. 一个view允许您获取所有类型文档的 IDFoo
  2. 使用 SDK 的脚本:
    1. 查询该视图
    2. 检索每个Foo文档
    3. 从文档的内容中获取BaridFoo
    4. 获取Bar文档
    5. 相应地更新Foo内容并在数据库中保存(更新)Foor文档
于 2016-04-25T10:50:04.603 回答
4

我猜你的意思是一些类似于 SQL UPDATE 的声明性解决方案。这样的东西不适用于 CB 3,但从 CB 4.1 开始,N1QL 有一个 UPDATE 语句。检查http://developer.couchbase.com/documentation/server/4.1/n1ql/n1ql-language-reference/update.html

于 2016-04-25T08:51:27.533 回答
1

UPDATE对我来说不太有效,因为我需要在两种文档类型之间执行某种“连接”。但看起来 Couchbase 的MERGE声明正是我所需要的。

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

我们将升级到 4.1,看看情况如何。

于 2016-05-15T12:30:25.060 回答