gpt4 book ai didi

couchdb - 类型属性是在 CouchDB 中存储不同数据实体的正确方法吗?

转载 作者:行者123 更新时间:2023-12-02 10:25:05 26 4
gpt4 key购买 nike

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

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

最佳答案

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

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

你会:

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

然后在 View 中发出包含用户信息的文档,而不是使用:

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

你会写:

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

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

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

关于couchdb - 类型属性是在 CouchDB 中存储不同数据实体的正确方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13771780/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com