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

MongoDB插入option集合时,如何让嵌套数组对象自动生成_id?

解决MongoDB数组中子文档自动生成_id的问题

我之前也碰到过这个情况,MongoDB默认只会给顶层插入的文档自动生成_id字段,嵌套在数组里的子文档并不会触发这个自动生成机制,得我们手动处理才行。

原因说明

MongoDB的自动_id生成逻辑是针对顶层文档设计的:当你向集合插入一个文档时,MongoDB会自动为这个顶层文档分配ObjectId,但数组内的子文档属于嵌套结构,不在自动生成的范围内,必须显式指定_id。

修正后的插入代码

你只需要在数组里的每个子文档中,手动添加_id: new ObjectId()即可:

db.getCollection('option').insert({
  "createdBy": "support",
  "optionName": "Nationality",
  "createdDate": new Date(),
  "isActive": true,
  "option": [
    {
      "_id": new ObjectId(), // 手动生成子文档的ObjectId
      "optionValue": "Malaysian",
      "createdBy": "support",
      "createdDate": ISODate("2016-06-30T08:19:09.709Z"),
      "isActive": true
    },
    {
      "_id": new ObjectId(), // 手动生成子文档的ObjectId
      "optionValue": "Singaporean",
      "createdBy": "support",
      "createdDate": ISODate("2016-06-30T08:19:09.709Z"),
      "isActive": true
    }
  ]
})

额外提示

如果是在应用程序中(比如Node.js、Python等)操作MongoDB,需要使用对应驱动提供的ObjectId构造函数来生成:

  • Node.js:const { ObjectId } = require('mongodb'); 之后用new ObjectId()生成
  • Python:from bson.objectid import ObjectId 之后用ObjectId()生成

执行这段代码后,你插入的文档中option数组内的每个子文档都会拥有独立的_id字段,和你目标文档的结构完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:34:23