NoteZ_技术博客 NoteZ_技术博客
🏠 首页
  • 📚 Web技术
  • 📋 Npm笔记
  • 📑 Markdown
  • 📄 Git笔记
  • 📝 Nginx文档
  • 📓 Linux文档
  • 📖 技术文档
  • 📜 其他文档
  • 🧊 NodeJs
  • 🎡 Express
  • 🔥 Rust
  • 🎉 Koa2
  • 🍃 MongoDB
  • 🐬 MySql
  • 🥦 Oracle
  • 🍁 Python
  • 🍄 JavaScript
  • 🌰 CSS
  • 🧄 HTML
  • 🥑 Canvas
  • 🌽 Nuxt
  • 🍆 React
  • 🥜 Vue
  • 🧅 TypeScript
  • 🌶️ AI
  • 📘 分类
  • 📗 标签
  • 📙 归档
⚜️ 在线编辑 (opens new window)
  • 📁 站点收藏
  • 📦 前端组件库
  • 📊 数据可视化
  • 🌈 开源插件
  • 🎗️ 关于我
  • 🔗 友情链接
GitHub (opens new window)

NoteZ_技术博客

前端界的小学生
🏠 首页
  • 📚 Web技术
  • 📋 Npm笔记
  • 📑 Markdown
  • 📄 Git笔记
  • 📝 Nginx文档
  • 📓 Linux文档
  • 📖 技术文档
  • 📜 其他文档
  • 🧊 NodeJs
  • 🎡 Express
  • 🔥 Rust
  • 🎉 Koa2
  • 🍃 MongoDB
  • 🐬 MySql
  • 🥦 Oracle
  • 🍁 Python
  • 🍄 JavaScript
  • 🌰 CSS
  • 🧄 HTML
  • 🥑 Canvas
  • 🌽 Nuxt
  • 🍆 React
  • 🥜 Vue
  • 🧅 TypeScript
  • 🌶️ AI
  • 📘 分类
  • 📗 标签
  • 📙 归档
⚜️ 在线编辑 (opens new window)
  • 📁 站点收藏
  • 📦 前端组件库
  • 📊 数据可视化
  • 🌈 开源插件
  • 🎗️ 关于我
  • 🔗 友情链接
GitHub (opens new window)
  • Express

  • Koa2

  • MongoDB

    • linux 下 mongodb 的安装及配置
    • MongoDB 备份(mongodump)与恢复(mongorestore)
    • MongoDB 插入(insert)数据的正确方法
    • MongoDB 数据库
    • MongoDB 数据库设置账号密码(权限)
    • MongoDB集合数据查询总结
    • Mongoose 动态给 Schema 添加属性
      • 1、使用 Schema.prototype.add()
      • 2、设置 Schema 的 strict
      • 3、使用 Mixed types
    • Mongoose 数据验证
    • NodeJs 连接操作 MongoDB 数据库
    • Node下使用MongoDB 数据库多条件模糊查询
    • 使用 JS 操作 MongoDB 命令
    • 如何解决Mongodb大数据量分页查询效率问题
    • 给MongoDB数据库bin目录添加工具集
  • MySql

  • NodeJs

  • Oracle

  • Rust

  • Python

  • 后端开发
  • MongoDB
NoteZ
2019-02-20
目录

Mongoose 动态给 Schema 添加属性

在这里总结下如何使用NodeJs在MongoDB中动态添加属性。

# 1、使用 Schema.prototype.add()

看了官方文档,官网给的方法是,实例化 Schema 后,先使用 Schema.prototype.add()添加属性,再调用 mongoose.model 编译出 model:

const ToySchema = new Schema();
ToySchema.add({ name: 'string', color: 'string', price: 'number' });
const TurboManSchema = new Schema();
// You can also `add()` another schema and copy over all paths, virtuals,
// getters, setters, indexes, methods, and statics.
TurboManSchema.add(ToySchema).add({ year: Number });
1
2
3
4
5
6

但是按照我的习惯,会直接在实例化 Schema 后在后面直接用mongoose.model直接编译出 model。这样在给 model 创建方法的时候也比较方便。

# 2、设置 Schema 的 strict

这是我使用的方法。mogoose默认 strict 为 true,就不允许添加 Schema 中未定义的属性,将 strict 设为 false 就可以。但是风险就是如果用户使用了 Schema 中已经定义的属性,那原来那个属性就有被覆盖的风险:

let thingSchema = new Schema({..}, { strict: false });
let thing = new Thing({ iAmNotInTheSchema: true });
thing.save() // iAmNotInTheSchema is now saved to the db!!
1
2
3

# 3、使用 Mixed types

按照我的理解,Mixed types 就是不具体定义 mongoose 有什么属性了,直接使用 any 表示 Schema 里可以有任意多个属性,且不限定数据结构。这样又太泛了,对其他的属性没有约束:

const Any = new Schema({ any: {} });
const Any = new Schema({ any: Object });
const Any = new Schema({ any: Schema.Types.Mixed });
const Any = new Schema({ any: mongoose.Mixed });
// Note that if you're using `type`, putting _any_ POJO as the `type` will
// make the path mixed.
const Any = new Schema({
  any: {
    type: { foo: String }
  }
});
1
2
3
4
5
6
7
8
9
10
11

以上就是 Mongoose 动态给 Schema 添加属性的方法。

#MongoDB
上次更新: 2024/01/30, 00:35:17
MongoDB集合数据查询总结
Mongoose 数据验证

← MongoDB集合数据查询总结 Mongoose 数据验证→

最近更新
01
Gitea数据备份与还原
03-10
02
Linux 中使用 rsync 同步文件目录教程
03-10
03
Linux 使用 rsync 互相传输同步文件的简单步骤
03-08
更多文章>
Theme by Vdoing | Copyright © 2019-2025 NoteZ,All rights reserved | 冀ICP备2021027292号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式