猫鼬:检查对象是否是猫鼬对象

时间:2012-05-31 03:35:34

标签: mongoose

任何人都知道检查对象是否是猫鼬对象的最简单方法是什么? 我只是最好检查是否定义了toObject()或是否有更有效的方法。 非常感谢

10 个答案:

答案 0 :(得分:29)

您可以通过instanceof运算符检查对象的原型,以确认它是您的猫鼬模型的实例。使用mongoosejs.com中的示例模式:

if (obj instanceof Cat) {
    // yes, it's a mongoose Cat model object
    ...
}

答案 1 :(得分:16)

我正在使用此

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

答案 2 :(得分:1)

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

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

function checkIfMongooseObject(obj) {
  return _.get(obj, 'constructor.base') instanceof mongoose.Mongoose;
}

与提供的其他解决方案相反,这个解决方案是安全的 - 无论obj类型(甚至是String或Int),它都不会失败。

答案 3 :(得分:1)

另一种简单的方法:

const isMongooseModel = (object instanceof Mongoose.Model);

答案 4 :(得分:1)

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

function isModel(obj) {
    obj = obj || {}
    return obj.prototype instanceof mongoose.Model
}

在我使用此上下文的情况下,我不想找回未定义的位置,但需要验证我没有期望模型的地方得到“ 3”或某些此类奇数值。

当然,在进一步思考之后,存在一种以上的“猫鼬对象”的方法。有时我将DTO误认为是Mongoose模型,然后在以后误用了它,因此在上面进行了测试...但是如果我只需要验证某事是一个实例,但由于某种原因不知道实例类型,我会做类似Lukasz上面的操作,并查看构造函数库。

答案 5 :(得分:1)

如果要确保它是您期望的模型,则此。

dog.constructor.modelName === 'Dog'

答案 6 :(得分:0)

在检查ObjectID是填充对象或只是ObjectID的情况下,对我来说:

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

答案 7 :(得分:0)

尝试一下:

var mongoose = require('mongoose');

function isMongoModel(yourObject){

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

答案 8 :(得分:0)

一种确定方法是是否进行

if (data.toObject)

如果为true,它将返回Function语句;如果不是,则返回undefined;

答案 9 :(得分:0)

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

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