Mongoose: проверьте, является ли объект объектом mongoose
Кто-нибудь знает, что самый простой способ проверить, является ли объект объектом mongoose?
Я просто проверяю, установлен ли toObject(), или есть более эффективный способ.
большое спасибо
Ответы
Ответ 1
Вы можете проверить прототип объекта с помощью оператора instanceof
, чтобы подтвердить его экземпляр вашей модели мангуста. Используя примерную схему из mongoosejs.com:
if (obj instanceof Cat) {
// yes, it a mongoose Cat model object
...
}
Ответ 2
Я использую этот
if (object.constructor.name === 'model') {
// object is mongoose object
}
Ответ 3
Еще один простой способ:
const isMongooseModel = (object instanceof Mongoose.Model);
Ответ 4
Чтобы проверить, является ли obj
объектом Mongoose, используйте этот фрагмент:
const _ = require('lodash');
const mongoose = require('mongoose');
function checkIfMongooseObject(obj) {
return _.get(obj, 'constructor.base') instanceof mongoose.Mongoose;
}
В отличие от других решений, предлагаемых, это один безопасен - он никогда не сможет независимо тип obj
(будь это даже строка или Int).
Ответ 5
Мой предпочтительный способ определить, является ли объект моделью Mongoose, почти такой же простой, как описанный выше, но не совсем:
function isModel(obj) {
obj = obj || {}
return obj.prototype instanceof mongoose.Model
}
В контексте, где я использую это, я не хочу возвращать неопределенное, но нужно убедиться, что я не получил "3" или какое-то такое странное значение, где я ожидаю модель.
Конечно, если подумать об этом, есть несколько способов стать "объектом Мангуста". Я иногда ошибочно принимал DTO за модель Mongoose, а затем использовал ее позже, отсюда мой тест выше... но если бы мне просто нужно было проверить, что что-то является экземпляром, но по какой-то причине не мог знать тип экземпляра, я бы сделайте что-то вроде того, что сделал Лукаш выше, и посмотрите на базу конструктора.
Ответ 6
Следующее для меня в случае проверки, когда ObjectID является заполненным объектом или просто ObjectID:
if (object._id.constructor.name === 'ObjectID') {
// Not a populated object, only its ID
}
Ответ 7
Попробуй это:
var mongoose = require('mongoose');
function isMongoModel(yourObject){
return yourObject.hasOwnProperty('schema') && yourObject.schema instanceof mongoose.Schema;
}
Ответ 8
Один из способов определить, если вы делаете
if (data.toObject)
он вернет оператор Function, если он истинный, вернет undefined, если это не так;
Ответ 9
Если вы работаете с машинописным шрифтом и используете импорт машинописного текста, это помогает
import { Mongoose } from 'mongoose';
...
const isMongooseModel = (object instanceof Mongoose.prototype.Model); // true if object is of type Model
const isMongooseDocument = (object instanceof Mongoose.prototype.Document); // true if object is of type Document
const isMongooseQuery = (object instanceof Mongoose.prototype.Query); // true if object is of type Query