我知道在我们的 mongoose schema 中添加新属性不会反映到 mongodb 文档中的现有数据,除非你这样做
db.collection.update(...)
。
但是为什么 mongoose 在你查询后添加这个新属性呢?
路线处理程序:
// base url endpoit /api/users
// router.get("/", getAllUsers)
async function getAllUsers(req, res) {
const users = await User.find({})
res.status(StatusCodes.OK).json({
success: true,
data: {
users: users
}
})
}
添加新属性
isAdmin
:
const userSchema = mongoose.Schema({
...
...
password: {
type: String,
required: true
},
isAdmin: {
type: Boolean,
required: true,
default: false
}
}, { timestamps: true })
为什么猫鼬在收到查询文档后插入
isAdmin
?它应该从我们的实际数据库返回确切的 Binary jSON
而不修改它,这样我们就知道我们忘记更新现有文档,因为假设将来我们进入 mongodb 并尝试基于该属性查询文档,例如 db.users.find({ isAdmin: false })
,没有 isAdmin
属性的文档将始终被排除,除非您使用 null
或 undefined
。
Mongoose 不处理 BSON,它使用 Javascript。
当你执行
await User.find({})
时:
new User(returned value)
如果
User
的定义发生更改,即通过修改架构,最后一步中的实例化将使用新定义,因此缺少的 isAdmin 属性将被赋予默认值 false。