You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python向MongoDB对象的Hotel字段中插入数据

如何往MongoDB已有文档的Hotel嵌套字段中插入内容

你现在遇到的问题很清晰:用insert_one()是插入全新文档的操作,所以才会新增一条记录,而不是修改你目标中那条带空Hotel字段的文档。要实现往已有文档的嵌套字段里添加内容,得用MongoDB的更新操作,具体来说是update_one()方法配合$set操作符,下面给你详细的解决步骤:

第一步:明确核心逻辑

要修改已有文档,你需要完成两个关键动作:

  • 精准定位到你要修改的目标文档(比如通过唯一的_id)
  • 告诉MongoDB要更新哪个字段以及对应的内容

第二步:完整代码示例

先看调整后的代码,我会逐行给你解释:

from pymongo import MongoClient
from bson.objectid import ObjectId  # 导入ObjectId,用来通过_id精准定位文档

client = MongoClient('localhost', 27017)
db = client['db']
collection_expenses = db['expenses']

# 获取用户输入的住宿天数
d = int(input('Insert how many days did you stay?: '))

# 1. 构造查询条件:匹配你要修改的目标文档(这里用你提供的_id)
query = {"_id": ObjectId("5ad0870d2602ff20497b71b8")}

# 2. 构造更新内容:用$set把天数写入Hotel字段
# 如果要直接替换整个Hotel字段的内容,用下面这行
update_data = {"$set": {"Hotel": {"days": d}}}

# 如果你只想往已有的Hotel字段里新增子字段(不覆盖原有内容),可以改成这样:
# update_data = {"$set": {"Hotel.days": d}}

# 3. 执行更新操作
result = collection_expenses.update_one(query, update_data)

# 可以打印结果确认操作状态
if result.matched_count > 0:
    print(f"成功更新了{result.modified_count}条文档")
else:
    print("没有找到匹配的目标文档")

关键细节说明

  • update_one():只会更新第一个匹配到的文档,刚好符合你修改单条指定文档的需求
  • $set操作符:用来指定字段的新值——如果字段不存在会自动创建;如果字段已存在,会替换它的值(如果是嵌套对象,就替换整个对象,除非你用Hotel.days这种子字段路径来精准更新)
  • 通过_id定位是最可靠的方式,因为每个文档的_id都是唯一的,不会误改其他文档

执行完这段代码后,你原来的目标文档会变成这样:

{ "_id" : ObjectId("5ad0870d2602ff20497b71b8"), "Hotel" : {"days": 你输入的数字} }

内容的提问来源于stack exchange,提问作者Filipe Santos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:30:28