Преобразует ли Mongoose неявно тип поля при сравнении в коллекции согласно определенной схеме? - PullRequest
0 голосов
/ 26 сентября 2018

Итак, у меня есть схема Мангуста , которая имеет следующее поле:

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, он не даст никакого результата:

db.orders.findOne({status: 2});

не будет работать и, как и ожидалось, будет работать

db.orders.findOne({status: "2"});

Однако, когда я выполнилзапрос с использованием mongoose (ver: "^ 4.13.14") в моем коде node.js Это работает:

orders.findOne({status: 2})

Итак, хотел бы понять, еслиМангуст ли это преобразование внутренне на основе определенной схемы?Или что-то еще происходит под капотом.

1 Ответ

0 голосов
/ 26 сентября 2018

Enum в mongoose - это просто string с дополнительным валидатором.Вы можете наблюдать то же поведение для обычных строк, таких как:

let orderSchema = new mongoose.Schema({
  status:{
      type: String
    }
  });

let Order = mongoose.model("orders", orderSchema);
let doc = await Order.findOne({ status: 2 });

Просматривая find документы вы можете прочитать, что:

Условия приведеныдо соответствующих им типов схем перед отправкой команды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...