Node.js Couchbase在nodeJS中检索关系文档

Node.js Couchbase在nodeJS中检索关系文档,node.js,couchbase,couchbase-ottoman,Node.js,Couchbase,Couchbase Ottoman,我仍在争论该走哪条路,并可能将某些信息存储在自己的文档中。例如,客户可以有地址,每个地址都是其自己的文档,然后在客户文档中,在地址下会存储一个ref键数组。这样做的好处是,我可以简单地根据键值更新这些文档,而不必首先获取客户文档,找到地址的数组索引,然后修改整个文档或使用子文档用索引替换数组的内容。 我陷入困境的是如何检索那些引用的子文档。N1QL是唯一的方法还是KV API提供了一种方法来实现这一点,即检索整个客户文档,然后通过地址数组循环并以这种方式检索所有引用的文档。我知道Ottoman提

我仍在争论该走哪条路,并可能将某些信息存储在自己的文档中。例如,客户可以有地址,每个地址都是其自己的文档,然后在客户文档中,在地址下会存储一个ref键数组。这样做的好处是,我可以简单地根据键值更新这些文档,而不必首先获取客户文档,找到地址的数组索引,然后修改整个文档或使用子文档用索引替换数组的内容。
我陷入困境的是如何检索那些引用的子文档。N1QL是唯一的方法还是KV API提供了一种方法来实现这一点,即检索整个客户文档,然后通过地址数组循环并以这种方式检索所有引用的文档。我知道Ottoman提供了类似的功能,但我对最新版本的SDK 2.6和Ottoman有一个问题,因为它没有得到很好的维护。因此,希望有人能分享一些见解什么是最好的方法以及为什么是最好的方法。

如果您想依赖键/值,那么您需要按照您所描述的进行多重查找。我对奥斯曼帝国不是很熟悉:它可能会帮你做到这一点,但在幕后它仍然是多个键/值操作和/或N1QL

使用N1QL,您可以执行连接,但在幕后,它最终将按键/值提取文档。它只是为你做这些额外的步骤。直接键/值始终是最快的路径

如果您仍在决定是将数据拆分到多个文档中,还是将数据“非规范化”为单个文档,那么您应该考虑的一件事是,您将一起访问customer+地址的频率,以及您将单独访问customer/地址的频率。如果你经常读写客户+地址,考虑把它放在一个文档里。否则,考虑将其放入多个文档。


第三种选择是将其存储在两个位置,或者更确切地说,在客户文档中“缓存”地址数据。这很棘手,因为如果你不小心,它可能会失去同步。因此,在走这条路之前,请确保它是值得的。

如果您想要依赖键/值,那么您需要按照您所描述的进行多重查找。我对奥斯曼帝国不是很熟悉:它可能会帮你做到这一点,但在幕后它仍然是多个键/值操作和/或N1QL

使用N1QL,您可以执行连接,但在幕后,它最终将按键/值提取文档。它只是为你做这些额外的步骤。直接键/值始终是最快的路径

如果您仍在决定是将数据拆分到多个文档中,还是将数据“非规范化”为单个文档,那么您应该考虑的一件事是,您将一起访问customer+地址的频率,以及您将单独访问customer/地址的频率。如果你经常读写客户+地址,考虑把它放在一个文档里。否则,考虑将其放入多个文档。

第三种选择是将其存储在两个位置,或者更确切地说,在客户文档中“缓存”地址数据。这很棘手,因为如果你不小心,它可能会失去同步。所以,在你走那条路之前,一定要确保这是值得的