30

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

4

10 回答 10

35

您可以通过操作员检查对象的原型,instanceof以确认它是您的猫鼬模型的实例。使用来自mongoosejs.com的示例模式:

if (obj instanceof Cat) {
    // yes, it's a mongoose Cat model object
    ...
}
于 2012-05-31T12:46:10.387 回答
21

我正在使用这个

if (object.constructor.name === 'model') {
  // object is mongoose object
}
于 2013-11-04T07:33:02.100 回答
6

我确定一个对象是否是 Mongoose 模型的首选方法几乎和上面一样简单,但不完全是:

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

在我使用它的上下文中,我不想得到未定义的返回,但确实需要验证我没有得到“3”或一些我期望模型的奇怪值。

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

于 2018-09-12T16:53:00.810 回答
3

一种确定方法是您是否执行

if (data.toObject)

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

于 2019-06-29T08:40:53.127 回答
3

另一种简单的方法:

const isMongooseModel = (object instanceof Mongoose.Model);
于 2018-05-17T21:13:55.143 回答
2

这个,如果你想确保它是你期望的模型。

dog.constructor.modelName === 'Dog'

于 2020-08-09T21:17:48.610 回答
2

在检查 ObjectID 是填充对象还是只是 ObjectID 时,我的以下情况:

if (object._id.constructor.name === 'ObjectID') {
    // Not a populated object, only its ID
} 
于 2015-07-14T22:44:17.563 回答
1

尝试这个:

var mongoose = require('mongoose');

function isMongoModel(yourObject){

    return yourObject.hasOwnProperty('schema') && yourObject.schema instanceof mongoose.Schema;
}
于 2019-06-29T07:19:50.203 回答
1

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

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

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

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

于 2017-11-28T15:39:53.040 回答
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

于 2019-07-12T08:39:08.460 回答