- Mastering MongoDB 3.x
- Alex Giamas
- 217字
- 2021-08-20 10:10:51
One-to-many, many-to-many
When the number of elements in the many side of the relationship can grow unbounded, it's better to use references.
References can come in two forms:
From the one-side of the relationship, store an array of many-sided-elements:
> db.Person.findOne()
{ "_id" : ObjectId("590a530e3e37d79acac26a41"), "name" : "alex", addresses:
[ ObjectID('590a56743e37d79acac26a44'),
ObjectID('590a56743e37d79acac26a46'),
ObjectID('590a56743e37d79acac26a54') ] }
This way we can get the array of addresses from the one-side and then query with in to get all the documents from the many-side:
> person = db.Person.findOne({"name":"mary"})
> addresses = db.Addresses.find({_id: {$in: person.addresses} })
Turning this one-many to many-many is as easy as storing this array in both ends of the relationship (person and address collections).
From the many-side of the relationship, store a reference to the one-side:
> db.Address.find()
{ "_id" : ObjectId("590a55863e37d79acac26a44"), "person": ObjectId("590a530e3e37d79acac26a41"), "address" : [ "N29DD" ] }
{ "_id" : ObjectId("590a55863e37d79acac26a46"), "person": ObjectId("590a530e3e37d79acac26a41"), "address" : [ "SW1E5ND" ] }
{ "_id" : ObjectId("590a55863e37d79acac26a54"), "person": ObjectId("590a530e3e37d79acac26a41"), "address" : [ "N225QG" ] }
> person = db.Person.findOne({"name":"alex"})
> addresses = db.Addresses.find({"person": person._id})
As we can see, with both designs we need to make two queries to the database to fetch the information. The second approach has the advantage that it won't let any document grow unbounded so it can be used in cases where one-many is one-millions.
- 大數據導論:思維、技術與應用
- Ansible Configuration Management
- Big Data Analytics with Hadoop 3
- 21天學通JavaScript
- SCRATCH與機器人
- 程序設計缺陷分析與實踐
- 計算機原理
- Hands-On Linux for Architects
- 自動化控制工程設計
- CorelDRAW X4中文版平面設計50例
- 大數據平臺異常檢測分析系統的若干關鍵技術研究
- Bayesian Analysis with Python
- Learning ServiceNow
- Excel 2007終極技巧金典
- Ansible 2 Cloud Automation Cookbook