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

如何在Mongoose中创建SubDocuments子文档数组?附存储数据示例

Mongoose创建SubDocuments(子文档)数组方法

你给出的MongoDB参考存储结构如下:

{
  "_id": {"$oid":"6178b6a61d8341796714e1c7"},
  "name":"devi",
  "last":"zack",
  "book": [
    {
      "book":"jungle book",
      "pages":{"$numberInt":"33"},
      "_id":{"$oid":"6178ca6a52f395988a490241"}
    }
  ],
  "__v":{"$numberInt":"7"}
}

要实现该结构的Mongoose操作,按以下步骤进行即可:

步骤1:定义子文档与父文档Schema

先单独声明子文档的结构,再在父Schema中将对应字段声明为子Schema的数组类型:

const mongoose = require('mongoose');
const { Schema } = mongoose;

// 定义Book子文档Schema,对应book数组内的单条数据结构
const BookSchema = new Schema({
  book: String, // 书名字段
  pages: Number // 页数字段
});

// 定义父文档Schema
const UserSchema = new Schema({
  name: String,
  last: String,
  // 将book字段设置为子文档数组类型
  book: [BookSchema]
});

// 编译为可操作的Model
const User = mongoose.model('User', UserSchema);

注意:Mongoose默认会为每个子文档自动生成唯一_id字段,和你提供的存储结构完全匹配,不需要手动声明。如果不需要子文档_id,可在定义子Schema时添加配置new Schema({...}, { _id: false })。

步骤2:创建包含子文档数组的新文档

实例化Model时直接传入子文档数组内容,保存后即可生成对应结构的MongoDB文档:

const newUser = new User({
  name: 'devi',
  last: 'zack',
  book: [
    { book: 'jungle book', pages: 33 }
  ]
});
// 保存到数据库
await newUser.save();

步骤3:给已有文档追加子文档

如果需要给已存在的父文档新增子文档,直接操作数组后保存即可:

// 查询到目标父文档
const user = await User.findOne({ name: 'devi' });
// 追加新的子文档
user.book.push({ book: '动物农场', pages: 112 });
// 保存变更
await user.save();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:54:00