MongoDB能否在单次查询中同时更新文档并插入内嵌文档
假设这是MongoDB中已插入的一个文档,我想要在Attachment数组中新增一个文档,同时在单次查询中更新last_update_time字段。
{ "_id" : ObjectId("64d0a5cdc9311cad167f55d5"), "Title" : "Main", "last_update_time" : epoch_time, "Attachment" : [ { "key" : "1111.jpg", "file_name" : "Mongodb.jpg" } ] }
解决方案
你可以通过单次updateOne原子操作完成需求,同时组合$push和$set两个更新操作符即可,不需要拆分多次查询。
操作代码示例
// 请将your_collection_name替换为你实际使用的集合名 db.your_collection_name.updateOne( // 匹配指定_id的目标文档 { "_id": ObjectId("64d0a5cdc9311cad167f55d5") }, // 定义更新逻辑 { // 往Attachment数组末尾追加新的附件文档 $push: { "Attachment": { "key": "2222.jpg", "file_name": "你自定义的文件名.jpg" // 可根据需求补充新附件的其他字段 } }, // 同步更新last_update_time为当前Unix时间戳(毫秒级) $set: { "last_update_time": Date.now() } } )
补充说明
- 若需要避免完全相同的附件文档重复插入数组,可将
$push替换为$addToSet操作符 - 若需要将新附件插入到数组的指定位置、或者插入后对数组做排序/截断,可配合
$push的$each、$position、$sort等修饰符实现 - 本次操作是原子性的,不会出现数组更新完成但时间戳未更新的中间状态
内容的提问来源于stack exchange,提问作者Sanjeev Khanna
相关产品推荐
相关产品推荐

