Mongoose:检查对象是否为Mongoose对象

Mongoose:检查对象是否为Mongoose对象,mongoose,Mongoose,有人知道检查一个物体是否是猫鼬物体的最简单方法吗? 我只是最好检查是否定义了toObject(),或者是否有更有效的方法。 非常感谢您可以通过instanceof操作符检查对象的原型,以确认它是mongoose模型的实例。使用以下示例架构: 我在用这个 if (object.constructor.name === 'model') { // object is mongoose object } 在检查ObjectID是否为已填充对象或仅为ObjectID时,我将执行以下操作: if (

有人知道检查一个物体是否是猫鼬物体的最简单方法吗? 我只是最好检查是否定义了toObject(),或者是否有更有效的方法。
非常感谢

您可以通过
instanceof
操作符检查对象的原型,以确认它是mongoose模型的实例。使用以下示例架构:

我在用这个

if (object.constructor.name === 'model') {
  // object is mongoose object
}

在检查ObjectID是否为已填充对象或仅为ObjectID时,我将执行以下操作:

if (object._id.constructor.name === 'ObjectID') {
    // Not a populated object, only its ID
} 

要检查
obj
是否为猫鼬对象,请使用以下代码段:

const _ = require('lodash');
const mongoose = require('mongoose');

function checkIfMongooseObject(obj) {
  return _.get(obj, 'constructor.base') instanceof mongoose.Mongoose;
}
与提供的其他解决方案相反,此解决方案是安全的-无论是哪种类型的
obj
(偶数字符串或Int)。

另一种简单方法:

const isMongooseModel = (object instanceof Mongoose.Model);

确定对象是否为猫鼬模型的首选方法几乎与上述方法一样简单,但并不完全相同:

function isModel(obj) {
    obj = obj || {}
    return obj.prototype instanceof mongoose.Model
}
在我使用它的上下文中,我不想返回未定义的值,但需要验证我没有得到一个“3”或一些我期望模型的奇怪值

当然,在进一步思考这个问题之后,有不止一种方法可以成为“Mongoose对象”。我有时会将DTO误认为Mongoose模型,后来又误用了它,因此我在上面进行了测试……但是如果我只需要验证某个对象是实例,但由于某种原因无法知道实例类型,我会像上面卢卡斯那样做,看看构造函数库。

试试这个:

var mongoose = require('mongoose');

function isMongoModel(yourObject){

    return yourObject.hasOwnProperty('schema') && yourObject.schema instanceof mongoose.Schema;
}

一种确定的方法是你是否做了

if (data.toObject)

如果为true,它将返回一个函数语句;如果不是,它将返回undefined

如果您正在使用typescript并使用typescript导入,那么这会有所帮助

从“猫鼬”导入{Mongoose};
...
const isMongooseModel=(Mongoose.prototype.Model的对象实例);//如果对象的类型为Model,则为true
const isMongooseDocument=(Mongoose.prototype.Document的对象实例);//如果对象的类型为Document,则为true
const isMongooseQuery=(Mongoose.prototype.Query的对象实例);//如果对象的类型为Query,则为true

如果您想确保它是您期望的型号,请选择此选项


dog.constructor.modelName===“dog”

不错!e、 g.this.message=消息的对象实例?对象:新消息(对象);'“模型”是一个非常通用的名称。我的解决方案更严格一点
object.constructor.collection.name!='模式名称“
-1由于对象使用不明确,现在是什么?更合适,因为它使用
prototype
来检查
Mongoose.Model
的实例是否已尝试,但出现错误。。。
if (data.toObject)