何时在NoSQL中创建新文档

何时在NoSQL中创建新文档,nosql,couchdb,Nosql,Couchdb,我刚开始使用NoSQL(在我的例子中是CouchDB),似乎无法回答我认为应该是一个简单的问题,即创建新文档与将数据附加到现有文档之间的常见做法是什么 我目前有一个每个用户的数据库(这意味着我只能让用户访问他们拥有的数据) 因此,在顶层,我的CouchDB看起来像: 用户数据库 用户数据库 假设我有一个简单的笔记本应用程序,每个用户可以有一个或多个笔记本,每个笔记本包含一个或多个笔记 是指在每个笔记本上添加一个文档,如下所示: UsersA_db NoteBook1_doc={notes

我刚开始使用NoSQL(在我的例子中是CouchDB),似乎无法回答我认为应该是一个简单的问题,即创建新文档与将数据附加到现有文档之间的常见做法是什么

我目前有一个每个用户的数据库(这意味着我只能让用户访问他们拥有的数据)

因此,在顶层,我的CouchDB看起来像:

  • 用户数据库
  • 用户数据库
假设我有一个简单的笔记本应用程序,每个用户可以有一个或多个笔记本,每个笔记本包含一个或多个笔记

是指在每个笔记本上添加一个文档,如下所示:

  • UsersA_db
    • NoteBook1_doc={notes:[{notebody:'foo'},{notebody:'bar'}]}
    • NoteBook2_doc={notes:[{notebody:'baz'},{notebody:'boo'}]}
或者,无论文档是什么、包含什么或与什么相关,所有内容都应该是完全平坦的吗?

  • UsersA_db
    • NoteBook1_doc={id:1}
    • 注1_doc{id:1,parentBook:1,注体:'foo'}
    • Note2_doc{id:2,parentBook:1,notebody:'bar'}
    • 一些完全不同的文档{id:1,文本:“所有的牛都吃草”}
    • 会计信息_doc{姓名:'Bob',年龄:34}

这两种方式都可以,但需要记住的一个有用的事实是,文档是CouchDB中原子事务的单位。如果所有数据都在一个文档中,则可以对CouchDB中的数据进行原子性事务性更改

另外,回想一下CouchDB视图被称为“视图”,因为它们允许您以完全一致的状态以各种方式查看数据。视图总是在您请求时表示数据的时间点快照。视图也可以放在一起。例如,视图可以通过将单个笔记整理在一起来显示笔记本


约阿希姆说得对,这是一种判断,但就我个人而言,我更倾向于你的第二种选择:每一个音符都是一份文件。

物体的构成几乎总是取决于味道,而不是硬事实。如果您在应用程序本身的对象设计方面有更多的经验,那么最好从那里开始,并保持数据库结构的相似性。