Couchbase - 在所有文档类型 Foo 中创建新的 属性,其值取自文档类型 Bar?
Couchbase - Creating new property in all document types Foo where its value is taken from document type Bar?
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' 文档都包含一个 "foreign key" 栏(一个名为 'BarId' 的字段)。
除了以编程方式检索和更新所有实体之外,最简单的方法是什么?
(Couchbase 版本为 3.0)
我猜你指的是一些类似于 SQL UPDATE 的声明性解决方案。 CB 3 没有这样的东西,但是从 CB 4.1 开始,N1QL 有一个 UPDATE 语句。检查 http://developer.couchbase.com/documentation/server/4.1/n1ql/n1ql-language-reference/update.html.
正如 TAM 所说,您可能可以在 Couchbase 4.1 中使用来自 N1QL
的 UPDATE 语句来做到这一点...但您使用的是 3.0.
在 Couchbase 3.x 中,你最好的写法是:
- a
view
将允许您获取类型为 Foo
的所有文档的 ID
- 一个使用 SDK 的脚本:
- 查询那个视图
- 检索每个
Foo
文档
- 从
Foo
文档的内容中获取 Bar
id
- 获取
Bar
文档
- 相应地更新
Foo
内容并在 db 中保存(更新)Foor
文档
UPDATE
对我来说不太适用,因为我需要在 2 种文档类型之间执行某种 "join"。但看起来 Couchbase 的 MERGE
声明正是我所需要的。
http://developer.couchbase.com/documentation/server/current/n1ql/n1ql-language-reference/merge.html
我们将升级到 4.1,看看效果如何。
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' 文档都包含一个 "foreign key" 栏(一个名为 'BarId' 的字段)。
除了以编程方式检索和更新所有实体之外,最简单的方法是什么? (Couchbase 版本为 3.0)
我猜你指的是一些类似于 SQL UPDATE 的声明性解决方案。 CB 3 没有这样的东西,但是从 CB 4.1 开始,N1QL 有一个 UPDATE 语句。检查 http://developer.couchbase.com/documentation/server/4.1/n1ql/n1ql-language-reference/update.html.
正如 TAM 所说,您可能可以在 Couchbase 4.1 中使用来自 N1QL
的 UPDATE 语句来做到这一点...但您使用的是 3.0.
在 Couchbase 3.x 中,你最好的写法是:
- a
view
将允许您获取类型为Foo
的所有文档的 ID
- 一个使用 SDK 的脚本:
- 查询那个视图
- 检索每个
Foo
文档 - 从
Foo
文档的内容中获取Bar
id - 获取
Bar
文档 - 相应地更新
Foo
内容并在 db 中保存(更新)
Foor
文档
UPDATE
对我来说不太适用,因为我需要在 2 种文档类型之间执行某种 "join"。但看起来 Couchbase 的 MERGE
声明正是我所需要的。
http://developer.couchbase.com/documentation/server/current/n1ql/n1ql-language-reference/merge.html
我们将升级到 4.1,看看效果如何。