Couchbase中的引用文档和嵌入文档之间应该使用哪一个?
我想使用Couchbase noSQL数据库。但是,我对使用引用文档和嵌入文档的文档结构感到困惑 我有三个实体Couchbase中的引用文档和嵌入文档之间应该使用哪一个?,couchbase,Couchbase,我想使用Couchbase noSQL数据库。但是,我对使用引用文档和嵌入文档的文档结构感到困惑 我有三个实体 任命 预约发票 发票的付款明细。(一对多) 那么,我应该使用哪种文档结构?为什么?这肯定是一个没有“正确”答案的非常广泛的问题。您需要考虑您的访问模式(即您通常将如何写入和检索数据)以及您所布置的数据结构 作为一个例子,我认为完全有可能在一个文档中同时包含所有这些内容: key: appointment::123 { "date": "2018-01-29", "plac
那么,我应该使用哪种文档结构?为什么?这肯定是一个没有“正确”答案的非常广泛的问题。您需要考虑您的访问模式(即您通常将如何写入和检索数据)以及您所布置的数据结构 作为一个例子,我认为完全有可能在一个文档中同时包含所有这些内容:
key: appointment::123
{
"date": "2018-01-29",
"place": "123 main st",
"invoice": {
"date": "2018-01-30",
"due": "2018-02-28",
"items": [
{ "desc": "widget", "quantity": 2, "price":3.99 },
{ "desc": "foo", "quantity": 1, "price":24.99 },
{ "desc": "bar", "quantity": 3, "price":5.00 }
]
}
您的问题同时标记了CouchDb和Couchbase,所以我不确定您打算使用哪一个。但是,如果您使用Couchbase,我知道您可以使用它(从Couchbase Server 4.5开始)。也就是说,如果只需要文档的一部分,则不必每次都检索整个文档。随着文档越来越大,这可能会有所帮助。我不知道CouchDb中是否有相同类型的东西(它可能被称为不同的东西)。此外,Couchbase有一个完整的SQL实现,因此无论最终使用何种模型,您都可以查询数据。我使用过Couchbase Server。如何在Couchbase中找到特定用户的唯一约会或发票文档?这实际上是一个单独的问题,但是:假设您有一个字段
“user”:“jayd”
在您的预约文件中。您可以在该用户字段上创建一个索引,并使用N1QL查询,如SELECT a.*FROM appointment a WHERE a.user='jayd'
,或者如果您不想使用N1QL,您可以使用一个键创建一个查找文档,如jayd::appointments,它本身将包含一个文档ID列表。同样,这完全取决于您的用例访问模式。