《MongoDB 关系》要点:
本文介绍了MongoDB 关系,希望对您有用。如果有疑问,可以联系我们。
MongoDB 的关系表现多个文档之间在逻辑上的相互联系.
文档间可以通过嵌入和引用来树立联系.
MongoDB 中的关系可以是:
1:1 (1对1)
1: N (1对多)
N: 1 (多对1)
N: N (多对多)
接下来我们来斟酌下用户与用户地址的关系.
一个用户可以有多个地址,所以是一对多的关系.
以下是 user 文档的简单布局:
{
"_ID":ObjectID("52ffc33cd85242f436000001"),
"name": "Tom Hanks",
"contact": "987654321",
"dob": "01-01-1991"}
以下是 address 文档的简单布局:
{
"_ID":ObjectID("52ffc4a5d85242602e000000"),
"building": "22 A,Indiana Apt",
"pincode": 123456,
"city": "Los Angeles",
"state": "California"}
嵌入式关系
使用嵌入式办法,我们可以把用户地址嵌入到用户的文档中:
"_ID":ObjectID("52ffc33cd85242f436000001"),
"dob": "01-01-1991",
"name": "Tom Benzamin",
"address": [
{
"building": "22 A,
"state": "California"
},
{
"building": "170 A,Acropolis Apt",
"pincode": 456789,
"city": "Chicago",
"state": "Illinois"
}]}
以上数据保留在单一的文档中,可以比较容易的获取和维护数据. 你可以这样查询用户的地址:
>db.users.findOne({"name":"Tom Benzamin"},{"address":1})
注意:以上查询中 db 和 users 表现数据库和集合.
这种数据结构的缺点是,如果用户和用户地址在赓续增加,数据量赓续变大,会影响读写性能.
引用式关系
引用式关系是设计数据库时经常用到的办法,这种办法把用户数据文档和用户地址数据文档分开,通过引用文档的 ID 字段来建立关系.
{
"_ID":ObjectID("52ffc33cd85242f436000001"),
"address_IDs": [
ObjectID("52ffc4a5d85242602e000000"),
ObjectID("52ffc4a5d85242602e000001")
]}
以上实例中,用户文档的 address_IDs 字段包括用户地址的对象ID(ObjectID)数组.
我们可以读取这些用户地址的工具ID(ObjectID)来获取用户的详细地址信息.
这种办法需要两次查询,第一次查询用户地址的对象ID(ObjectID),第二次通过查询的ID获取用户的详细地址信息.
>var result = db.users.findOne({"name":"Tom Benzamin"},{"address_IDs":1})>var addresses = db.address.find({"_ID":{"$in":result["address_IDs"]}})
如您还有不明确的可以在下面与我留言或是与我探讨QQ群308855039,我们一起飞!
欢迎参与《MongoDB 关系》讨论,分享您的想法,内存溢出PHP学院为您提供专业教程。
总结以上是内存溢出为你收集整理的MongoDB 关系全部内容,希望文章能够帮你解决MongoDB 关系所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)