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