Couchbase中的引用文档和嵌入文档之间应该使用哪一个?

Couchbase中的引用文档和嵌入文档之间应该使用哪一个?,couchbase,Couchbase,我想使用Couchbase noSQL数据库。但是,我对使用引用文档和嵌入文档的文档结构感到困惑 我有三个实体 任命 预约发票 发票的付款明细。(一对多) 那么,我应该使用哪种文档结构?为什么?这肯定是一个没有“正确”答案的非常广泛的问题。您需要考虑您的访问模式(即您通常将如何写入和检索数据)以及您所布置的数据结构 作为一个例子,我认为完全有可能在一个文档中同时包含所有这些内容: key: appointment::123 { "date": "2018-01-29", "plac

我想使用Couchbase noSQL数据库。但是,我对使用引用文档和嵌入文档的文档结构感到困惑

我有三个实体

  • 任命

  • 预约发票

  • 发票的付款明细。(一对多)


  • 那么,我应该使用哪种文档结构?为什么?

    这肯定是一个没有“正确”答案的非常广泛的问题。您需要考虑您的访问模式(即您通常将如何写入和检索数据)以及您所布置的数据结构

    作为一个例子,我认为完全有可能在一个文档中同时包含所有这些内容:

    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列表。同样,这完全取决于您的用例访问模式。