如何在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
相关产品推荐
相关产品推荐

