node.js - 根据定义的模式在集合中进行比较时,Mongoose 是否隐式转换字段的类型?
问题描述
所以我有一个猫鼬模式,它有以下字段:
var orderSchema = new Mongoose.Schema({
status:{
type: Types.String,
enum: ['0','2', '6', '9', '10', '11', '12'],
default: '0'
}
});
Mongoose.model("order", orderSchema);
上述状态字段的类型为string。
假设您有一个状态字段,其中"2"
包含 db 中的值。如果我从 mongo shell 运行以下查询,它不会给出任何结果:
db.orders.findOne({status: 2});
不会工作,正如预期的那样,这会工作
db.orders.findOne({status: "2"});
但是,当我在node.js代码中使用mongoose(ver:"^4.13.14")执行查询时,这可行:
orders.findOne({status: 2})
那么,想了解 mongoose 是否根据定义的模式在内部进行这种转换?或者在幕后发生了其他事情。
解决方案
mongoose 中的枚举只是一个string
带有额外验证器的。您可以观察到常规字符串的相同行为,例如:
let orderSchema = new mongoose.Schema({
status:{
type: String
}
});
let Order = mongoose.model("orders", orderSchema);
let doc = await Order.findOne({ status: 2 });
浏览find
文档,您可以阅读:
在发送命令之前,条件被转换为它们各自的 SchemaType。
推荐阅读
- mysql - MySQL JSON 与表的任意键
- java - 如何从特定位置读取文件并缓存它以避免多次调用
- amazon-web-services - RedShift:需要帮助优化子查询 WHERE IN (SELECT *)
- android - 如何在 Android 工作人员中检测一系列工作人员中的前一个工作人员已失败
- java - 如果节点值包含类似,则 JSOUP 无法将 html 字符串解析为文档
- visual-studio - Android SDK 中缺少 AVD 管理器。我该如何解决?
- r - 根据R中的关键字表对数据进行分组的最佳方法是什么
- python - AWS Lambda 无服务器资源处理程序返回消息:“解压缩后的大小必须小于 262144000 字节
- angular - 如何使用名为的组件应用样式
- android - bluetooth.getDefaultAdapter 引发警告?