所以我从SQL后台切换到NoSQL。所以我知道我应该在这里"非规范化"。所以基本上我对我必须做什么有一个简化的想法;
用户这些文件包含身份验证信息,可能是付款方式,用户名和各种详细信息
职位这些帖子是由用户发布的,在每个帖子中,我们必须显示用户的用户名和电子邮件。因此,通过"非规范化"的方法,我会将用户的用户名和电子邮件放入他/她发布的每个帖子中。
但是,当用户更改用户名或电子邮件时,这不会产生问题吗?我不必追溯去更新所有帖子吗?
我设计正确吗?还是错过了什么?
在这种情况下,您没有义务对数据进行非规范化。
您可以将用户和帖子存储为单独的文档(在同一数据库中):
{
"_id":"alice",
"email":"alice@wonderland.org"
}
{
"author":"alice",
"text":"Alice was beginning to get very tired of sitting by her sister on the bank, and of having nothing to do: once or twice she had peeped into the book her sister was reading, but it had no pictures or conversations in it, 'and what is the use of a book,' thought Alice 'without pictures or conversation?'"
}
然后,您需要一个映射函数来告知哪个字段将用于连接:
function(o) {
if (o.text) {
emit(o._id, {text:o.text, _id:o.author});
}
}
然后调用此视图,include_docs=true
和帖子的 ID 作为key
。
也许为此创建索引有点矫枉过正,但您可能会将其重用于其他有用的事情(例如"整理"博客文章和评论)。