4

我想把头绕过去CouchDB。我正在尝试关闭MongoDBto,CouchDB因为我认为 of 的概念对views我更有吸引力。CouchDB看起来所有记录都存储在一个数据库中。没有集合或任何东西的概念,例如在MongoDB. 那么,当存储不同的数据实体(如用户、博客文章、评论等)时,您如何在 map reduce 函数中区分它们?我正在考虑只使用某种type属性,并且对于每个项目,我只需要确保type始终指定 , 。当我阅读食谱网站时,这种想法得到了加强CouchDB,其中一个例子做了同样的事情。

这是最可靠的方法,还是有更好的方法?我正在考虑替代方案,我认为唯一的其他替代方法基本上是尽可能多地嵌入到逻辑文档中。就像,数据库中的直接记录都将是User记录,并且每个记录User都有一个数组Posts,您只需将所有的添加Posts到其中。这里的缺点是嵌入式文档不会获得自己的id属性,对吗?

4

1 回答 1

7

创作type时使用方便快捷views。或者,您可以考虑使用 JSON 文档的一部分。即,而不是定义:

{
    type: "user",
    firstname: "John",
    lastname: "Smith"
}

你将会拥有:

{
    user: {
        firstname: "John",
        lastname: "Smith"
    }
}

然后在视图中用于发出包含user信息的文档,而不是使用:

function (doc) {
    if (doc.type === "user") emit(null, doc);
}

你会写:

function (doc) {
    if (doc.user) emit(null, doc);
}

如您所见,没有太大区别。正如您已经意识到第一种方法是最广泛使用的,但第二种(afaik)被广泛接受。

关于将所有内容存储在Posts一个User文档中的问题。取决于您计划如何更新文档。请记住,每次更新时都需要编写整个文档(除非您使用attachments)。这意味着每次用户编写新Post内容时,您都需要检索包含arrayof的文档Posts,添加/修改一个元素并更新文档。可能太多(重)。

于 2012-12-07T23:49:48.993 回答