オブジェクトがマングースオブジェクトであるかどうかを確認する最も簡単な方法を知っている人はいますか? toObject()が定義されているかどうか、またはより効率的な方法があるかどうかを確認するのが最善ですか。どうもありがとう
instanceof
演算子を使用してオブジェクトのプロトタイプをチェックし、それがマングースモデルのインスタンスであることを確認できます。 mongoosejs.com のサンプルスキーマを使用:
if (obj instanceof Cat) {
// yes, it's a mongoose Cat model object
...
}
私はこれを使用しています
if (object.constructor.name === 'model') {
// object is mongoose object
}
オブジェクトがマングースモデルであるかどうかを判断するための私の好ましい方法は、上記とほぼ同じくらい簡単ですが、完全ではありません。
function isModel(obj) {
obj = obj || {}
return obj.prototype instanceof mongoose.Model
}
これを使用するコンテキストでは、未定義を取り戻したくありませんが、モデルを期待する「3」またはそのような奇妙な値を取得していないことを確認する必要があります。
もちろん、これについてさらに考えた後、「マングースオブジェクト」になる方法は複数あります。 DTOをMongooseモデルと間違えて後で誤用したことがあるので、上記のテストを行いました...しかし、何かがインスタンスであることを確認する必要があるだけで、何らかの理由でインスタンスタイプがわからない場合は、 Lukaszが上で行ったことのようなことをして、コンストラクターベースを見てください。
別の簡単な方法:
const isMongooseModel = (object instanceof Mongoose.Model);
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
のタイプ(StringまたはIntでも)に関係なく失敗することはありません。
これを試して:
var mongoose = require('mongoose');
function isMongoModel(yourObject){
return yourObject.hasOwnProperty('schema') && yourObject.schema instanceof mongoose.Schema;
}
決定する1つの方法は、
if (data.toObject)
trueの場合はFunctionステートメントを返し、そうでない場合はundefinedを返します。
TypeScriptを使用していて、TypeScriptインポートを使用している場合、これは役立ちます
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