考虑posts
集合的此模型:
{
id: 123,
title: "Hello World",
user: {
id: 999,
name: "John"
},
body: "Lorem ipsum"
}
然后我有users
集合:
{
id: 999,
name: "John",
email: "john@john.com",
group: {
id: 888,
name: "admin"
}
}
让我们说有一天,约翰决定将他的名字改为“John Doe”, 现在,这意味着每次用户更新其名称时:
我必须更新users
集合
我必须在posts
集合中找到用户与更新用户ID相同的所有文档,并更新名称
这被认为是一种好习惯吗? 还有另一种更好的方法吗?
提前致谢
答案 0 :(得分:0)
是的,这实际上是更新不同馆藏中文件之间共享的字段的唯一方法。
另一种解决方案是考虑更改数据的建模方式。您可以embed在用户集合中自己的文档中与每个用户相关的帖子文档。如下所示:
{
id: 999,
name: "John",
email: "john@john.com",
group: {
id: 888,
name: "admin"
}
posts: [
{
id: 123,
title: "Hello World",
body: "Lorem ipsum"
},
{
id: 235,
title: "Hello World 2",
body: "Lorem ipsum 2"
}
]
}
现在,每个用户都有一个嵌入到自己文档中的帖子列表。更新用户名时,您不需要在其他文档中再次更新它。但是,此数据模型可能无法满足您应用的需求
例如,您可能希望根据特定条件[发布日期,流行度......]显示来自不同用户的帖子,在这种情况下,查找与您匹配的所有用户的帖子文档将更加困难标准。 MongoDB提供了Aggregation Framwork来实现这一目标。
有关更新的一些一般提示: