web-dev-qa-db-ja.com

マングース:オブジェクトがマングースオブジェクトかどうかを確認します

オブジェクトがマングースオブジェクトであるかどうかを確認する最も簡単な方法を知っている人はいますか? toObject()が定義されているかどうか、またはより効率的な方法があるかどうかを確認するのが最善ですか。どうもありがとう

26
Chin

instanceof演算子を使用してオブジェクトのプロトタイプをチェックし、それがマングースモデルのインスタンスであることを確認できます。 mongoosejs.com のサンプルスキーマを使用:

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

私はこれを使用しています

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

オブジェクトがマングースモデルであるかどうかを判断するための私の好ましい方法は、上記とほぼ同じくらい簡単ですが、完全ではありません。

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

これを使用するコンテキストでは、未定義を取り戻したくありませんが、モデルを期待する「3」またはそのような奇妙な値を取得していないことを確認する必要があります。

もちろん、これについてさらに考えた後、「マングースオブジェクト」になる方法は複数あります。 DTOをMongooseモデルと間違えて後で誤用したことがあるので、上記のテストを行いました...しかし、何かがインスタンスであることを確認する必要があるだけで、何らかの理由でインスタンスタイプがわからない場合は、 Lukaszが上で行ったことのようなことをして、コンストラクターベースを見てください。

2

別の簡単な方法:

const isMongooseModel = (object instanceof Mongoose.Model);
2
djanowski

ObjectIDが入力されたオブジェクトであるか、単にObjectIDであるかを確認する場合は、次のようになります。

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

objがマングースオブジェクトであるかどうかを確認するには、次のスニペットを使用します。

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

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

提供されている他のソリューションとは異なり、これは安全です。objのタイプ(StringまたはIntでも)に関係なく失敗することはありません。

1

これを試して:

var mongoose = require('mongoose');

function isMongoModel(yourObject){

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

決定する1つの方法は、

if (data.toObject)

trueの場合はFunctionステートメントを返し、そうでない場合はundefinedを返します。

0
John

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

0
Sandeep K Nair