我最近在MongoDB开始学习,我对如何建立系统中实体之间的关系更加了解。
因此,当我习惯于以SQL方式建立这种关系时,当我改变逻辑以NoSQL方式思考时,我会感到困惑。
我看到MongoDB需要建模类型:嵌入式和引用式。
如果我理解正确,Referenced就像我们在SQL中所做的那样:
示例:1对N
创建两个表来表示实体,例如用户和地址。
创建用户对象和地址对象
将地址ID放入用户对象
{
"_id":ObjectId("52ffc33cd85242f436000001"),
"contact": "987654321",
"dob": "01-01-1991",
"name": "Tom Benzamin",
"address_ids": [
ObjectId("52ffc4a5d85242602e000000"),
ObjectId("52ffc4a5d85242602e000001")
]
}
嵌入式:
只创建一个表,在本例中为User。
创建一个用户对象,并在其中放置地址对象:
{
"_id":ObjectId("52ffc33cd85242f436000001"),
"contact": "987654321",
"dob": "01-01-1991",
"name": "Tom Benzamin",
"address": [
{
"building": "22 A, Indiana Apt",
"pincode": 123456,
"city": "Los Angeles",
"state": "California"
},
{
"building": "170 A, Acropolis Apt",
"pincode": 456789,
"city": "Chicago",
"state": "Illinois"
}]
}
所以,我的问题是:
要使用像MongoDB这样的NoSQL数据库的最佳功能,我必须使用嵌入式建模?
在嵌入式建模中我只创建一个实体,而内部的实体(本例中的地址对象)将没有ID,因为我没有创建表?
答案 0 :(得分:1)
你对MongoDB说得对。正如您所说,您有两种方法来存储数据。 最好的方法取决于你需要什么。
如果您的地址对象将在其他地方使用,请将其放在另一个表中,否则,您可以将其直接放在对象中。
如果您将MongoDB与NodeJS配合使用,则可以使用MongooseJS。它是一种具有为mongodb对象定义模式的特殊性的框架。它特别适用于嵌入对象,因为它为您嵌入的每个对象添加了一个objectId。