根据定义的模式在集合中进行比较时,Mongoose是否会隐式转换字段的类型?

时间:2018-09-26 13:43:06

标签: node.js mongodb mongoose

所以我有一个猫鼬模式,其中包含以下字段:

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})

因此,想了解猫鼬是否在内部基于定义的架构进行此转换? 或其他正在发生的事情。

1 个答案:

答案 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。