python中嵌套的mongodb创建三个集合,分别是景点,酒店,美食,怎么成功建立集合之间一对多和多对多的联系,并通过合理的数据结构和字段设置体现
时间: 2024-10-29 12:14:07 浏览: 14
基于Python多线程爬取与MongoDB存储的豆果美食1万菜谱设计源码
在Python中使用MongoDB进行嵌套关联,通常涉及设计文档的结构以便于表示一对多和多对多的关系。这里是一个简单的例子:
1. **创建集合**:
- 景点 (`sights`)
```python
db.create_collection('sights')
```
- 酒店 (`hotels`)
```python
db.create_collection('hotels')
```
- 美食 (`restaurants` 或 `food_stalls`,假设我们使用后者)
```python
db.create_collection('food_stalls')
```
2. **一对多关系示例**: 一个景点有多家酒店
- 在景点文档中,每个景点有`hotel_ids`数组存储酒店ID
- 景点文档模型:
```json
{
"_id": ObjectId,
"name": "名胜古迹",
"location": "地点",
"hotels": [ { "$ref": "hotels", "$id": "$hotel_id_1" }, ... ]
}
```
- 酒店文档模型:
```json
{
"_id": ObjectId,
"name": "酒店名称",
"address": "地址"
}
```
3. **多对多关系示例**: 酒店可以提供多种美食
- 这里我们可以使用嵌入式文档来存储关联菜单,而不是引用另一个集合
- 酒店文档模型(包括菜单部分):
```json
{
"_id": ObjectId,
"name": "酒店名称",
"address": "地址",
"menus": [
{"food Stall": "美食摊位1", "items": ["菜品1", "菜品2"]},
{"food Stall": "美食摊位2", "items": ["特色菜"]}
]
}
```
- 美食摊位文档模型 (假设`food_stalls`):
```json
{
"_id": ObjectId,
"name": "美食摊位",
"signature_dishes": ["招牌菜"]
}
```
4. **插入数据**:
- 分别插入景点、酒店和美食的数据。
5. **查询关系**:
- 查询某个景点下的所有酒店:
```python
hotels = db.sights.find_one({"_id": your_sight_id})['hotels']
```
- 查询酒店提供的所有菜品:
```python
menus = db.hotels.find_one({"_id": your_hotel_id})['menus']
```
阅读全文