我是MongoDB的新手 - 来自关系数据库背景.我想设计一个带有一些注释的问题结构,但我不知道用于评论的关系:embed或者reference?
有一些注释的问题,比如stackoverflow,会有这样的结构:
Question
title = 'aaa'
content = bbb'
comments = ???
Run Code Online (Sandbox Code Playgroud)
首先,我想使用嵌入式注释(我认为embed在MongoDB中推荐),如下所示:
Question
title = 'aaa'
content = 'bbb'
comments = [ { content = 'xxx', createdAt = 'yyy'},
{ content = 'xxx', createdAt = 'yyy'},
{ content = 'xxx', createdAt = 'yyy'} ]
Run Code Online (Sandbox Code Playgroud)
很清楚,但我担心这种情况:如果我想编辑指定的评论,我该如何获取其内容及其问题?没有_id让我找到一个,也没有question_ref让我找到它的问题.(我是新手,我不知道如果没有_id和没有任何方法可以做到这一点question_ref.)
我必须用ref不embed?然后我必须创建一个新的评论集合?
背景
我正在从我们的RDBMS数据库到MongoDB的转换原型.在非规范化的过程中,似乎我有两个选择,一个导致许多(数百万)较小的文档,或者一个导致较少(数十万)大文档.
如果我可以将它提炼成一个简单的模拟,那么具有较少客户文档的集合(如Java)之间的区别是:
class Customer {
private String name;
private Address address;
// each CreditCard has hundreds of Payment instances
private Set<CreditCard> creditCards;
}
或者包含许多许多付款文件的集合,如下所示:
class Payment {
private Customer customer;
private CreditCard creditCard;
private Date payDate;
private float payAmount;
}
问题
MongoDB是否设计为偏好许多很小的文档或更少的大文档?答案主要取决于我计划运行的查询吗?(即客户X有多少张信用卡?vs上个月所有客户支付的平均金额是多少?)
我已经环顾了很多,但我没有偶然发现任何可以帮助我回答我的问题的MongoDB架构最佳实践.
我正在尝试编写一个跟踪脚本,但我无法弄清楚数据库应该如何工作.
在MySQL中,我创建了一个类似于的表
User:
username_name: string
Campaign:
title: string
description: string
link: string
UserCampaign:
user_id: integer
camp_id: integer
Click:
os: text
referer: text
camp_id: integer
user_id: integer
Run Code Online (Sandbox Code Playgroud)
我需要能够:
如果我按照自己的方式做点什么的话
User {
Campaigns: [
{
Clicks: []
}
]
}
Run Code Online (Sandbox Code Playgroud)
我遇到两个问题: