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