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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:06:00