所以我有一个猫鼬模式,其中包含以下字段:
var orderSchema = new Mongoose.Schema({
status:{
type: Types.String,
enum: ['0','2', '6', '9', '10', '11', '12'],
default: '0'
}
});
Mongoose.model("order", orderSchema);
上述状态字段的类型为字符串。
假设您在数据库中有一个状态字段,其值为"2"
。
如果我从mongo shell运行以下查询,它将不会给出任何结果:
db.orders.findOne({status: 2});
将无法正常工作,并且可以正常工作
db.orders.findOne({status: "2"});
但是,当我在 node.js 代码中使用 mongoose(ver:“ ^ 4.13.14”)执行查询时 这有效:
orders.findOne({status: 2})
因此,想了解猫鼬是否在内部基于定义的架构进行此转换? 或其他正在发生的事情。
答案 0 :(得分:1)
猫鼬中的枚举只是一个带有附加验证符的string
。对于常规字符串,您可以观察到相同的行为:
let orderSchema = new mongoose.Schema({
status:{
type: String
}
});
let Order = mongoose.model("orders", orderSchema);
let doc = await Order.findOne({ status: 2 });
浏览find
docs可以看到:
在发送命令之前,将条件强制转换为其各自的SchemaType。