モデル
Model()
Model.$where()
Model.aggregate()
Model.applyDefaults()
Model.applyVirtuals()
Model.bulkSave()
Model.bulkWrite()
Model.castObject()
Model.cleanIndexes()
Model.countDocuments()
Model.create()
Model.createCollection()
Model.createIndexes()
Model.createSearchIndex()
Model.db
Model.deleteMany()
Model.deleteOne()
Model.diffIndexes()
Model.discriminator()
Model.distinct()
Model.dropSearchIndex()
Model.ensureIndexes()
Model.estimatedDocumentCount()
Model.events
Model.exists()
Model.find()
Model.findById()
Model.findByIdAndDelete()
Model.findByIdAndUpdate()
Model.findOne()
Model.findOneAndDelete()
Model.findOneAndReplace()
Model.findOneAndUpdate()
Model.hydrate()
Model.init()
Model.insertMany()
Model.inspect()
Model.listIndexes()
Model.listSearchIndexes()
Model.populate()
Model.prototype.$model()
Model.prototype.$where
Model.prototype.base
Model.prototype.baseModelName
Model.prototype.collection
Model.prototype.collection
Model.prototype.db
Model.prototype.deleteOne()
Model.prototype.discriminators
Model.prototype.increment()
Model.prototype.model()
Model.prototype.modelName
Model.prototype.save()
Model.recompileSchema()
Model.replaceOne()
Model.schema
Model.startSession()
Model.syncIndexes()
Model.translateAliases()
Model.updateMany()
Model.updateOne()
Model.updateSearchIndex()
Model.validate()
Model.watch()
Model.where()
Model()
パラメータ
doc
«Object» 初期設定の値[fields]
«Object» このドキュメントを返したクエリで選択されたフィールドを含むオプションのオブジェクト。Mongoose がクエリの射影を処理するために、このパラメータを設定する必要はありません。[skipId=false]
«Boolean» オプションのブール値。true の場合、mongoose はドキュメントに_id
フィールドを追加しません。
継承
モデルは、MongoDB とのやり取りのための主要なツールとなるクラスです。モデルのインスタンスはドキュメントと呼ばれます。
Mongoose において、「モデル」という用語は、mongoose.Model
クラスのサブクラスを指します。mongoose.Model
クラスを直接使用すべきではありません。以下に示すように、mongoose.model()
関数と connection.model()
関数は mongoose.Model
のサブクラスを作成します。
例
// `UserModel` is a "Model", a subclass of `mongoose.Model`.
const UserModel = mongoose.model('User', new Schema({ name: String }));
// You can use a Model to create new documents using `new`:
const userDoc = new UserModel({ name: 'Foo' });
await userDoc.save();
// You also use a model to create queries:
const userFromDb = await UserModel.findOne({ name: 'Foo' });
Model.$where()
パラメータ
argument
«String|Function» JavaScript の文字列または匿名関数
戻り値
- «Query»
参照
Query
を作成し、$where
条件を指定します。
JavaScript 式を使用して MongoDB 内のものをクエリする必要がある場合があります。これは、find({ $where: javascript })
を介して行うか、Mongoose のショートカットメソッドである $where を Query チェーンまたは Mongoose モデルから使用できます。
Blog.$where('this.username.indexOf("val") !== -1').exec(function (err, docs) {});
Model.aggregate()
パラメータ
[pipeline]
«Array» オブジェクトの配列としての集計パイプライン[options]
«Object» 集計オプション
戻り値
- «Aggregate»
参照
モデルコレクションで集計を実行します。
callback
が渡された場合、aggregate
が実行され、Promise
が返されます。コールバックが渡されない場合、aggregate
自体が返されます。
この関数は、以下のミドルウェアをトリガーします。
aggregate()
例
// Find the max balance of all accounts
const res = await Users.aggregate([
{ $group: { _id: null, maxBalance: { $max: '$balance' }}},
{ $project: { _id: 0, maxBalance: 1 }}
]);
console.log(res); // [ { maxBalance: 98000 } ]
// Or use the aggregation pipeline builder.
const res = await Users.aggregate().
group({ _id: null, maxBalance: { $max: '$balance' } }).
project('-id maxBalance').
exec();
console.log(res); // [ { maxBalance: 98 } ]
注意
- Mongoose は、
$project
および$group
演算子を使用すると、パイプラインの任意の段階でドキュメントの「形状」を再定義できるため、集計パイプラインをモデルのスキーマにキャストしません。これにより、ドキュメントが互換性のない形式になる可能性があります。mongoose-cast-aggregation プラグインを使用して、集計パイプラインの最小限のキャスティングを有効にできます。 - 返されるドキュメントは、Mongoose のドキュメントではなく、プレーンな JavaScript オブジェクトです (任意の形状のドキュメントが返される可能性があるため)。
集計の詳細
Model.applyDefaults()
パラメータ
obj
«Object|Document» デフォルトを適用するオブジェクトまたはドキュメント
指定されたドキュメントまたは POJO にデフォルトを適用します。
Model.applyVirtuals()
パラメータ
obj
«Object» 仮想を適用するオブジェクトまたはドキュメント[virtualsToApply]
«Array<string>» 適用する仮想のオプションのホワイトリスト
このモデルの仮想を、指定された POJO に適用します。仮想は、POJO をコンテキスト this
として実行します。
例
const userSchema = new Schema({ name: String });
userSchema.virtual('upper').get(function() { return this.name.toUpperCase(); });
const User = mongoose.model('User', userSchema);
const obj = { name: 'John' };
User.applyVirtuals(obj);
obj.name; // 'John'
obj.upper; // 'JOHN', Mongoose applied the return value of the virtual to the given object
Model.bulkSave()
パラメータ
documents
«Array<Document>»[options]
«Object» 基になるbulkWrite()
に渡されるオプション[options.timestamps]
«Boolean» デフォルトはnull
で、false に設定すると、mongoose はドキュメントにタイムスタンプを追加/更新しません。[options.session=null]
«ClientSession» この一括書き込みに関連付けられたセッション。トランザクションに関するドキュメントを参照してください。[options.wtimeout=null]
«number» 書き込み保証タイムアウト。[options.j=true]
«Boolean» false の場合、ジャーナル確認を無効にします
戻り値
- «BulkWriteResult»
bulkWrite()
からの戻り値
ドキュメントの配列を受け取り、変更を取得し、ドキュメントが新しいかどうか、変更があるかどうかによって、データベースにドキュメントを挿入/更新します。
bulkSave
は内部で bulkWrite
を使用するため、主に多数のドキュメント (10K+) を処理する場合に役立ちます。
bulkSave()
は、次の条件でエラーをスローします。
- 提供されたドキュメントの 1 つがバリデーションに失敗した場合。この場合、
bulkSave()
はbulkWrite()
を送信せず、最初のバリデーションエラーをスローします。 bulkWrite()
が失敗した場合 (たとえば、MongoDB に接続できないか、重複キーエラーが原因)。bulkWrite()
がいずれのドキュメントも挿入または更新しなかった場合。この場合、bulkSave()
は DocumentNotFound エラーをスローします。
一部の save()
呼び出しのみが成功した場合、bulkSave()
はエラーをスローしないことに注意してください。
Model.bulkWrite()
パラメータ
ops
«Array»[ops.insertOne.document]
«Object» 挿入するドキュメント[ops.insertOne.timestamps=true]
«Object» false の場合、操作にタイムスタンプを適用しません。[ops.updateOne.filter]
«Object» このフィルターに一致する最初のドキュメントを更新します。[ops.updateOne.update]
«Object» 更新演算子を含むオブジェクト。[ops.updateOne.upsert=false]
«Boolean» true の場合、一致するドキュメントがない場合はドキュメントを挿入します。[ops.updateOne.timestamps=true]
«Boolean» false の場合、操作にタイムスタンプを適用しません。[ops.updateOne.collation]
«Object» 使用する MongoDB 照合。[ops.updateOne.arrayFilters]
«Array»update
で使用される 配列フィルター。[ops.updateMany.filter]
«Object» このフィルターに一致するすべてのドキュメントを更新します。[ops.updateMany.update]
«Object» 更新演算子を含むオブジェクト。[ops.updateMany.upsert=false]
«Boolean» true の場合、filter
に一致するドキュメントがない場合はドキュメントを挿入します。[ops.updateMany.timestamps=true]
«Boolean» false の場合、操作にタイムスタンプを適用しません。[ops.updateMany.collation]
«Object» 使用する MongoDB 照合。[ops.updateMany.arrayFilters]
«Array»update
で使用される 配列フィルター。[ops.deleteOne.filter]
«Object» このフィルターに一致する最初のドキュメントを削除します。[ops.deleteMany.filter]
«Object» このフィルターに一致するすべてのドキュメントを削除します。[ops.replaceOne.filter]
«Object» このフィルターに一致する最初のドキュメントを置換します。[ops.replaceOne.replacement]
«Object» 置換ドキュメント。[ops.replaceOne.upsert=false]
«Boolean» true の場合、filter
に一致するドキュメントがない場合はドキュメントを挿入します。[ops.replaceOne.timestamps=true]
«Object» false の場合、操作にタイムスタンプを適用しません。[options]
«Object»[options.ordered=true]
«Boolean» true の場合、書き込みを順番に実行し、最初のエラーで停止します。false の場合、書き込みを並行して実行し、すべての書き込みが成功またはエラーになるまで続行します。[options.timestamps=true]
«Boolean» false の場合、タイムスタンプを操作に適用しません。操作レベルで上書きできます。[options.session=null]
«ClientSession» この一括書き込みに関連付けられたセッション。トランザクションに関するドキュメントを参照してください。[options.wtimeout=null]
«number» 書き込み保証タイムアウト。[options.j=true]
«Boolean» false の場合、ジャーナル確認を無効にします[options.skipValidation=false]
«Boolean» 一括書き込み操作で Mongoose スキーマのバリデーションをスキップする場合は true に設定します。Mongoose は現在、デフォルトでinsertOne
およびreplaceOne
操作でバリデーションを実行します。[options.bypassDocumentValidation=false]
«Boolean» true の場合、この一括処理のすべての書き込みについて、MongoDB サーバー側のスキーマバリデーションを無効にします。[options.throwOnValidationError=false]
«Boolean» true で、ordered: false
の場合、操作の 1 つがバリデーションに失敗したが、すべての有効な操作が正常に完了した場合にエラーをスローします。Mongoose は、すべての有効な操作を MongoDB サーバーに送信することに注意してください。[options.strict=null]
«Boolean|[object Object]» スキーマのstrict
オプションを上書きします。false の場合、この一括処理のすべての書き込みについて、スキーマで定義されていないフィールドのフィルタリングと書き込みを許可します。
戻り値
- «Promise» 操作が成功した場合、
BulkWriteOpResult
に解決します。
複数の insertOne
、updateOne
、updateMany
、replaceOne
、deleteOne
、および/または deleteMany
操作を 1 つのコマンドで MongoDB サーバーに送信します。これは、bulkWrite()
では MongoDB へのラウンドトリップが 1 回しかないため、複数の独立した操作 (たとえば、create()
を使用する場合) を送信するよりも高速です。
Mongoose は、提供するすべての操作でキャスティングを実行します。唯一の例外は、updateOne
または updateMany
の update
演算子をパイプラインに設定する場合です。Mongoose は、更新パイプラインをキャストしません。
この関数は、save()
、update()
のどちらのミドルウェアもトリガーしません。すべてのドキュメントで save()
ミドルウェアをトリガーする必要がある場合は、代わりに create()
を使用してください。
例
Character.bulkWrite([
{
insertOne: {
document: {
name: 'Eddard Stark',
title: 'Warden of the North'
}
}
},
{
updateOne: {
filter: { name: 'Eddard Stark' },
// If you were using the MongoDB driver directly, you'd need to do
// `update: { $set: { title: ... } }` but mongoose adds $set for
// you.
update: { title: 'Hand of the King' }
}
},
{
deleteOne: {
filter: { name: 'Eddard Stark' }
}
}
]).then(res => {
// Prints "1 1 1"
console.log(res.insertedCount, res.modifiedCount, res.deletedCount);
});
// Mongoose does **not** cast update pipelines, so no casting for the `update` option below.
// Mongoose does still cast `filter`
await Character.bulkWrite([{
updateOne: {
filter: { name: 'Annika Hansen' },
update: [{ $set: { name: 7 } }] // Array means update pipeline, so Mongoose skips casting
}
}]);
サポートされている操作は次のとおりです。
insertOne
updateOne
updateMany
deleteOne
deleteMany
replaceOne
Model.castObject()
パラメータ
obj
«Object» キャストするオブジェクトまたはドキュメントoptions
«Object» castObject に渡されるオプションoptions.ignoreCastErrors
«Boolean»true
に設定すると、ValidationError をスローせず、正常にキャストされた値のみを返します。
指定された POJO をモデルのスキーマにキャストします
例
const Test = mongoose.model('Test', Schema({ num: Number }));
const obj = Test.castObject({ num: '42' });
obj.num; // 42 as a number
Test.castObject({ num: 'not a number' }); // Throws a ValidationError
Model.cleanIndexes()
パラメータ
[callback]
«Function» オプションのコールバック
戻り値
- «Promise,undefined,void» コールバックが指定されている場合は
undefined
を返し、コールバックがない場合は promise を返します。
このモデルのスキーマで定義されていないすべてのインデックスを削除します。syncIndexes()
で使用されます。
返される promise は、削除されたインデックスの名前のリストを配列として解決します。
Model.countDocuments()
パラメータ
filter
«Object»
戻り値
- «Query»
データベースコレクション内の filter
に一致するドキュメントの数をカウントします。
例
Adventure.countDocuments({ type: 'jungle' }, function (err, count) {
console.log('there are %d jungle adventures', count);
});
大規模なコレクション内のすべてのドキュメントをカウントする場合は、代わりにestimatedDocumentCount()
関数を使用してください。 countDocuments({})
を呼び出すと、MongoDB は常にコレクション全体の完全スキャンを実行し、インデックスを使用しません。
countDocuments()
関数は count()
に似ていますが、countDocuments()
がサポートしていない演算子がいくつかあります。以下は、count()
がサポートしているが countDocuments()
がサポートしていない演算子と、推奨される代替手段です。
$where
:$expr
$near
:$geoWithin
with$center
$nearSphere
:$geoWithin
with$centerSphere
Model.create()
パラメータ
docs
«Array|Object» 挿入するドキュメント(スプレッドまたは配列)[options]
«Object»save()
に渡されるオプション。options
を指定するには、docs
はスプレッドではなく配列である必要があります。利用可能なオプションについては、Model.save を参照してください。[options.ordered]
«Boolean» ドキュメントを並行ではなく直列で保存します。[options.aggregateErrors]
«Boolean» 発生した最初のエラーをスローするのではなく、エラーを集約します。デフォルト: false
戻り値
- «Promise»
1 つ以上のドキュメントをデータベースに保存するためのショートカット。MyModel.create(docs)
は、docs 内のすべてのドキュメントに対して new MyModel(doc).save()
を実行します。
この関数は、以下のミドルウェアをトリガーします。
save()
例
// Insert one new `Character` document
await Character.create({ name: 'Jean-Luc Picard' });
// Insert multiple new `Character` documents
await Character.create([{ name: 'Will Riker' }, { name: 'Geordi LaForge' }]);
// Create a new character within a transaction. Note that you **must**
// pass an array as the first parameter to `create()` if you want to
// specify options.
await Character.create([{ name: 'Jean-Luc Picard' }], { session });
Model.createCollection()
パラメータ
[options]
«Object» MongoDB ドライバドキュメントを参照してください。
このモデルのコレクションを作成します。デフォルトでは、インデックスが指定されていない場合、mongoose はドキュメントが作成されるまでモデルのコレクションを作成しません。このメソッドを使用して、明示的にコレクションを作成してください。
注 1: トランザクションを開始する前にこれを呼び出す必要がある場合があります。 https://www.mongodb.com/docs/manual/core/transactions/#transactions-and-operations を参照してください。
注 2: スキーマに index または unique フィールドが含まれている場合は、これを呼び出す必要はありません。その場合は、Model.init()
を使用してください。
例
const userSchema = new Schema({ name: String })
const User = mongoose.model('User', userSchema);
User.createCollection().then(function(collection) {
console.log('Collection is created!');
});
Model.createIndexes()
パラメータ
[options]
«Object» 内部オプション
戻り値
- «Promise»
createIndex
関数を使用する点を除いて、ensureIndexes()
と似ています。
Model.createSearchIndex()
パラメータ
description
«Object»name
およびdefinition
を含むインデックスオプションdescription.name
«String»description.definition
«Object»
戻り値
- «Promise»
Atlas 検索インデックスを作成します。この関数は、MongoDB Atlas に接続されている場合にのみ機能します。
例
const schema = new Schema({ name: { type: String, unique: true } });
const Customer = mongoose.model('Customer', schema);
await Customer.createSearchIndex({ name: 'test', definition: { mappings: { dynamic: true } } });
Model.db
Type
- «property»
モデルが使用する接続インスタンス。
Model.deleteMany()
パラメータ
conditions
«Object»[options]
«Object» オプション。Query.prototype.setOptions()
を参照してください。[options.translateAliases=null]
«Boolean»true
に設定すると、filter
、projection
、update
、およびdistinct
内のスキーマ定義エイリアスを変換します。エイリアスと生のプロパティの両方が同じオブジェクトで定義されている場合に競合が発生すると、エラーがスローされます。
戻り値
- «Query»
コレクションから conditions
に一致するすべてのドキュメントを削除します。削除されたドキュメント数を含むプロパティ deletedCount
を持つオブジェクトを返します。remove()
と同様に動作しますが、single
オプションに関係なく、conditions
に一致するすべてのドキュメントを削除します。
例
await Character.deleteMany({ name: /Stark/, age: { $gte: 18 } }); // returns {deletedCount: x} where x is the number of documents deleted.
注意
この関数は deleteMany
クエリフックをトリガーします。詳細については、ミドルウェアドキュメントを参照してください。
Model.deleteOne()
パラメータ
conditions
«Object»[options]
«Object» オプション。Query.prototype.setOptions()
を参照してください。[options.translateAliases=null]
«Boolean»true
に設定すると、filter
、projection
、update
、およびdistinct
内のスキーマ定義エイリアスを変換します。エイリアスと生のプロパティの両方が同じオブジェクトで定義されている場合に競合が発生すると、エラーがスローされます。
戻り値
- «Query»
コレクションから conditions
に一致する最初のドキュメントを削除します。削除されたドキュメント数を示すプロパティ deletedCount
を持つオブジェクトを返します。remove()
と同様に動作しますが、single
オプションに関係なく、最大で 1 つのドキュメントを削除します。
例
await Character.deleteOne({ name: 'Eddard Stark' }); // returns {deletedCount: 1}
注意
この関数は deleteOne
クエリフックをトリガーします。詳細については、ミドルウェアドキュメントを参照してください。
Model.diffIndexes()
パラメータ
[options]
«Object»
戻り値
- «Promise<Object>» MongoDB で削除されるインデックスと、MongoDB で作成されるインデックスを
{ toDrop: string[], toCreate: string[] }
として含む。
Model.syncIndexes()
のドライランを実行し、syncIndexes()
を実行した場合に syncIndexes()
が削除および作成するインデックスを返します。
例
const { toDrop, toCreate } = await Model.diffIndexes();
toDrop; // Array of strings containing names of indexes that `syncIndexes()` will drop
toCreate; // Array of strings containing names of indexes that `syncIndexes()` will create
Model.discriminator()
パラメータ
name
«String» 識別モデル名schema
«Schema» 識別モデルスキーマ[options]
«Object|String» 文字列の場合、options.value
と同じです。[options.value]
«String»discriminatorKey
プロパティに格納される文字列。指定しない場合、Mongoose はname
パラメータを使用します。[options.clone=true]
«Boolean» デフォルトでは、discriminator()
は指定されたschema
を複製します。複製をスキップするには、false
に設定します。[options.overwriteModels=false]
«Boolean» デフォルトでは、Mongoose は別の識別子と同じ名前で識別子を定義することを許可しません。これを設定すると、同じ名前の識別子を上書きできます。[options.mergeHooks=true]
«Boolean» デフォルトでは、Mongoose はベーススキーマのフックを識別子スキーマのフックとマージします。このオプションをfalse
に設定すると、Mongoose は代わりに識別子スキーマのフックを使用します。[options.mergePlugins=true]
«Boolean» デフォルトでは、Mongoose はベーススキーマのプラグインを識別子スキーマのプラグインとマージします。このオプションをfalse
に設定すると、Mongoose は代わりに識別子スキーマのプラグインを使用します。
戻り値
- «Model» 新しく作成された識別モデル
識別子タイプを追加します。
例
function BaseSchema() {
Schema.apply(this, arguments);
this.add({
name: String,
createdAt: Date
});
}
util.inherits(BaseSchema, Schema);
const PersonSchema = new BaseSchema();
const BossSchema = new BaseSchema({ department: String });
const Person = mongoose.model('Person', PersonSchema);
const Boss = Person.discriminator('Boss', BossSchema);
new Boss().__t; // "Boss". `__t` is the default `discriminatorKey`
const employeeSchema = new Schema({ boss: ObjectId });
const Employee = Person.discriminator('Employee', employeeSchema, 'staff');
new Employee().__t; // "staff" because of 3rd argument above
Model.distinct()
パラメータ
field
«String»[conditions]
«Object» オプション[options]
«Object» オプション
戻り値
- «Query»
Model.dropSearchIndex()
パラメータ
name
«String»
戻り値
- «Promise»
名前で既存の Atlas 検索インデックスを削除します。この関数は、MongoDB Atlas に接続されている場合にのみ機能します。
例
const schema = new Schema({ name: { type: String, unique: true } });
const Customer = mongoose.model('Customer', schema);
await Customer.dropSearchIndex('test');
Model.ensureIndexes()
パラメータ
[options]
«Object» 内部オプション
戻り値
- «Promise»
スキーマで宣言された各インデックスに対して、mongo に createIndex
コマンドを送信します。 createIndex
コマンドは直列で送信されます。
例
await Event.ensureIndexes();
完了後、エラーが発生した場合は、この Model
で index
イベントが発行され、エラーが渡されます。
例
const eventSchema = new Schema({ thing: { type: 'string', unique: true } })
const Event = mongoose.model('Event', eventSchema);
Event.on('index', function (err) {
if (err) console.error(err); // error occurred during index creation
});
注: これを本番環境で実行することはお勧めしません。インデックスの作成は、負荷によってはデータベースのパフォーマンスに影響を与える可能性があります。注意して使用してください。
Model.estimatedDocumentCount()
パラメータ
[options]
«Object»
戻り値
- «Query»
MongoDB コレクション内のドキュメントの数を推定します。 estimatedDocumentCount()
はコレクション全体をスキャンするのではなくコレクションメタデータを使用するため、大規模なコレクションでは countDocuments()
を使用するよりも高速です。
例
const numAdventures = await Adventure.estimatedDocumentCount();
Model.events
Type
- «property»
発生したエラーを報告するイベントエミッタ。グローバルエラー処理に役立ちます。
例
MyModel.events.on('error', err => console.log(err.message));
// Prints a 'CastError' because of the above handler
await MyModel.findOne({ _id: 'Not a valid ObjectId' }).catch(noop);
Model.exists()
パラメータ
filter
«Object»[options]
«Object» オプション。Query.prototype.setOptions()
を参照してください。
戻り値
- «Query»
指定された filter
に一致するドキュメントがデータベースに少なくとも 1 つ存在する場合は _id
のみを含むドキュメントを返し、それ以外の場合は null
を返します。
内部的には、MyModel.exists({ answer: 42 })
は MyModel.findOne({ answer: 42 }).select({ _id: 1 }).lean()
と同等です。
例
await Character.deleteMany({});
await Character.create({ name: 'Jean-Luc Picard' });
await Character.exists({ name: /picard/i }); // { _id: ... }
await Character.exists({ name: /riker/i }); // null
この関数は、以下のミドルウェアをトリガーします。
findOne()
Model.find()
パラメータ
filter
«Object|ObjectId»[projection]
«Object|String|Array[String]» オプションで返されるフィールド。Query.prototype.select()
を参照してください。[options]
«Object» オプション。Query.prototype.setOptions()
を参照してください。[options.translateAliases=null]
«Boolean»true
に設定すると、filter
、projection
、update
、およびdistinct
内のスキーマ定義エイリアスを変換します。エイリアスと生のプロパティの両方が同じオブジェクトで定義されている場合に競合が発生すると、エラーがスローされます。
戻り値
- «Query»
参照
ドキュメントを検索します。
Mongoose は、コマンドが送信される前に、モデルのスキーマに一致するように filter
をキャストします。 Mongoose がどのように filter
をキャストするかについての詳細は、クエリキャスティングチュートリアルを参照してください。
例
// find all documents
await MyModel.find({});
// find all documents named john and at least 18
await MyModel.find({ name: 'john', age: { $gte: 18 } }).exec();
// executes, name LIKE john and only selecting the "name" and "friends" fields
await MyModel.find({ name: /john/i }, 'name friends').exec();
// passing options
await MyModel.find({ name: /john/i }, null, { skip: 10 }).exec();
Model.findById()
パラメータ
id
«Any» クエリ対象の_id
の値[projection]
«Object|String|Array[String]» オプションで返されるフィールド。Query.prototype.select()
を参照してください。[options]
«Object» オプション。Query.prototype.setOptions()
を参照してください。
戻り値
- «Query»
参照
_id フィールドで単一のドキュメントを検索します。 findById(id)
は findOne({ _id: id })
とほぼ*同等です。ドキュメントの _id
でクエリする場合は、findOne()
の代わりに findById()
を使用してください。
id
は、コマンドを送信する前にスキーマに基づいてキャストされます。
この関数は、以下のミドルウェアをトリガーします。
findOne()
* undefined
の処理方法を除きます。 findOne()
を使用すると、findOne(undefined)
と findOne({ _id: undefined })
は findOne({})
と同等であり、任意のドキュメントを返すことがわかります。ただし、mongoose は findById(undefined)
を findOne({ _id: null })
に変換します。
例
// Find the adventure with the given `id`, or `null` if not found
await Adventure.findById(id).exec();
// select only the adventures name and length
await Adventure.findById(id, 'name length').exec();
Model.findByIdAndDelete()
パラメータ
id
«Object|Number|String» クエリ対象の_id
の値[options]
«Object» オプション。Query.prototype.setOptions()
を参照してください。[options.strict]
«Boolean|String» スキーマの 厳密モードオプションを上書きします[options.translateAliases=null]
«Boolean»true
に設定すると、filter
、projection
、update
、およびdistinct
内のスキーマ定義エイリアスを変換します。エイリアスと生のプロパティの両方が同じオブジェクトで定義されている場合に競合が発生すると、エラーがスローされます。
戻り値
- «Query»
参照
ドキュメントの _id フィールドによって、MongoDB findOneAndDelete()
コマンドを発行します。言い換えれば、findByIdAndDelete(id)
は findOneAndDelete({ _id: id })
の省略形です。
この関数は、以下のミドルウェアをトリガーします。
findOneAndDelete()
Model.findByIdAndUpdate()
パラメータ
id
«Object|Number|String» クエリ対象の_id
の値[update]
«Object»[options]
«Object» オプション。Query.prototype.setOptions()
を参照してください。[options.returnDocument='before']
«String»'before'
および'after'
の 2 つの可能な値があります。デフォルトでは、更新が適用される前のドキュメントが返されます。[options.lean]
«Object» 真の場合、mongoose はドキュメントを mongoose ドキュメントではなくプレーンな JavaScript オブジェクトとして返します。Query.lean()
および Mongoose lean チュートリアル を参照してください。[options.session=null]
«ClientSession» このクエリに関連付けられたセッション。 トランザクションドキュメントを参照してください。[options.strict]
«Boolean|String» スキーマの 厳密モードオプションを上書きします[options.timestamps=null]
«Boolean»false
に設定され、スキーマレベルのタイムスタンプが有効になっている場合、この更新のタイムスタンプをスキップします。これにより、タイムスタンプを上書きできることに注意してください。スキーマレベルのタイムスタンプが設定されていない場合は何も行いません。[options.sort]
«Object|String» 条件によって複数のドキュメントが見つかった場合、更新するドキュメントを選択するためのソート順序を設定します。[options.runValidators]
«Boolean» true の場合、このコマンドで更新バリデータを実行します。更新バリデータは、モデルのスキーマに対して更新操作を検証します[options.setDefaultsOnInsert=true]
«Boolean»setDefaultsOnInsert
とupsert
が true の場合、新しいドキュメントが作成されると、mongoose はモデルのスキーマで指定されたデフォルトを適用します[options.includeResultMetadata]
«Boolean» true の場合、ドキュメントだけではなく、MongoDB ドライバからの完全な ModifyResult を返します[options.upsert=false]
«Boolean» trueの場合、ドキュメントが見つからなければ新しいドキュメントを挿入します。[options.new=false]
«Boolean» trueの場合、元のドキュメントではなく変更されたドキュメントを返します。[options.select]
«Object|String» 返すドキュメントのフィールドを設定します。[options.translateAliases=null]
«Boolean»true
に設定すると、filter
、projection
、update
、およびdistinct
内のスキーマ定義エイリアスを変換します。エイリアスと生のプロパティの両方が同じオブジェクトで定義されている場合に競合が発生すると、エラーがスローされます。[options.overwriteDiscriminatorKey=false]
«Boolean» Mongooseはデフォルトでupdate
からdiscriminatorキーの更新を削除します。discriminatorキーの更新を許可するには、overwriteDiscriminatorKey
をtrue
に設定します。
戻り値
- «Query»
参照
ドキュメントの_idフィールドによってmongodbのfindOneAndUpdateコマンドを発行します。findByIdAndUpdate(id, ...)
はfindOneAndUpdate({ _id: id }, ...)
と同等です。
一致するドキュメントを検索し、update
引数に従って更新し、任意のoptions
を渡し、見つかったドキュメント(存在する場合)を返します。
この関数は、以下のミドルウェアをトリガーします。
findOneAndUpdate()
例
A.findByIdAndUpdate(id, update, options) // returns Query
A.findByIdAndUpdate(id, update) // returns Query
A.findByIdAndUpdate() // returns Query
注意
atomic
操作名ではないすべてのトップレベルの更新キーは、設定操作として扱われます。
例
Model.findByIdAndUpdate(id, { name: 'jason bourne' }, options)
// is sent as
Model.findByIdAndUpdate(id, { $set: { name: 'jason bourne' }}, options)
注意
findOneAndX
およびfindByIdAndX
関数は、限定的な検証をサポートしています。runValidators
オプションを設定することで検証を有効にできます。
本格的な検証が必要な場合は、最初にドキュメントを取得する従来のアプローチを使用してください。
const doc = await Model.findById(id)
doc.name = 'jason bourne';
await doc.save();
Model.findOne()
パラメータ
[conditions]
«Object»[projection]
«Object|String|Array[String]» オプションで返されるフィールド。Query.prototype.select()
を参照してください。[options]
«Object» オプション。Query.prototype.setOptions()
を参照してください。[options.translateAliases=null]
«Boolean»true
に設定すると、filter
、projection
、update
、およびdistinct
内のスキーマ定義エイリアスを変換します。エイリアスと生のプロパティの両方が同じオブジェクトで定義されている場合に競合が発生すると、エラーがスローされます。
戻り値
- «Query»
参照
1つのドキュメントを検索します。
conditions
は、コマンドが送信される前にそれぞれのSchemaTypesにキャストされます。
注:conditions
はオプションであり、conditions
がnullまたはundefinedの場合、mongooseは空のfindOne
コマンドをMongoDBに送信し、これは任意のドキュメントを返します。_id
でクエリする場合は、代わりにfindById()
を使用してください。
例
// Find one adventure whose `country` is 'Croatia', otherwise `null`
await Adventure.findOne({ country: 'Croatia' }).exec();
// Model.findOne() no longer accepts a callback
// Select only the adventures name and length
await Adventure.findOne({ country: 'Croatia' }, 'name length').exec();
Model.findOneAndDelete()
パラメータ
conditions
«Object»[options]
«Object» オプション。Query.prototype.setOptions()
を参照してください。[options.strict]
«Boolean|String» スキーマの 厳密モードオプションを上書きします[options.projection=null]
«Object|String|Array[String]» 返すオプションのフィールド。Query.prototype.select()
を参照してください。[options.session=null]
«ClientSession» このクエリに関連付けられたセッション。 トランザクションドキュメントを参照してください。[options.includeResultMetadata]
«Boolean» true の場合、ドキュメントだけではなく、MongoDB ドライバからの完全な ModifyResult を返します[options.sort]
«Object|String» 条件によって複数のドキュメントが見つかった場合、更新するドキュメントを選択するためのソート順序を設定します。[options.select]
«Object|String» 返すドキュメントのフィールドを設定します。[options.maxTimeMS]
«Number» クエリに時間制限を設定します - mongodb >= 2.6.0が必要です。[options.translateAliases=null]
«Boolean»true
に設定すると、filter
、projection
、update
、およびdistinct
内のスキーマ定義エイリアスを変換します。エイリアスと生のプロパティの両方が同じオブジェクトで定義されている場合に競合が発生すると、エラーがスローされます。
戻り値
- «Query»
MongoDBのfindOneAndDelete()
コマンドを発行します。
一致するドキュメントを検索し、削除し、見つかったドキュメント(存在する場合)を返します。
この関数は、以下のミドルウェアをトリガーします。
findOneAndDelete()
例
A.findOneAndDelete(conditions, options) // return Query
A.findOneAndDelete(conditions) // returns Query
A.findOneAndDelete() // returns Query
findOneAndX
およびfindByIdAndX
関数は、限定的な検証をサポートしています。runValidators
オプションを設定することで検証を有効にできます。
本格的な検証が必要な場合は、最初にドキュメントを取得する従来のアプローチを使用してください。
const doc = await Model.findById(id)
doc.name = 'jason bourne';
await doc.save();
Model.findOneAndReplace()
パラメータ
filter
«Object» このフィルターに一致する最初のドキュメントを置き換えます。[replacement]
«Object» このドキュメントで置き換えます。[options]
«Object» オプション。Query.prototype.setOptions()
を参照してください。[options.returnDocument='before']
«String»'before'
および'after'
の 2 つの可能な値があります。デフォルトでは、更新が適用される前のドキュメントが返されます。[options.lean]
«Object» 真の場合、mongoose はドキュメントを mongoose ドキュメントではなくプレーンな JavaScript オブジェクトとして返します。Query.lean()
および Mongoose lean チュートリアル を参照してください。[options.session=null]
«ClientSession» このクエリに関連付けられたセッション。 トランザクションドキュメントを参照してください。[options.strict]
«Boolean|String» スキーマの 厳密モードオプションを上書きします[options.timestamps=null]
«Boolean»false
に設定され、スキーマレベルのタイムスタンプが有効になっている場合、この更新のタイムスタンプをスキップします。これにより、タイムスタンプを上書きできることに注意してください。スキーマレベルのタイムスタンプが設定されていない場合は何も行いません。[options.projection=null]
«Object|String|Array[String]» 返すオプションのフィールド。Query.prototype.select()
を参照してください。[options.sort]
«Object|String» 条件によって複数のドキュメントが見つかった場合、更新するドキュメントを選択するためのソート順序を設定します。[options.includeResultMetadata]
«Boolean» true の場合、ドキュメントだけではなく、MongoDB ドライバからの完全な ModifyResult を返します[options.select]
«Object|String» 返すドキュメントのフィールドを設定します。[options.maxTimeMS]
«Number» クエリに時間制限を設定します - mongodb >= 2.6.0が必要です。[options.translateAliases=null]
«Boolean»true
に設定すると、filter
、projection
、update
、およびdistinct
内のスキーマ定義エイリアスを変換します。エイリアスと生のプロパティの両方が同じオブジェクトで定義されている場合に競合が発生すると、エラーがスローされます。
戻り値
- «Query»
MongoDBのfindOneAndReplace()
コマンドを発行します。
一致するドキュメントを検索し、提供されたドキュメントで置き換え、そのドキュメントを返します。
この関数は、次のクエリミドルウェアをトリガーします。
findOneAndReplace()
例
A.findOneAndReplace(filter, replacement, options) // return Query
A.findOneAndReplace(filter, replacement) // returns Query
A.findOneAndReplace() // returns Query
Model.findOneAndUpdate()
パラメータ
[conditions]
«Object»[update]
«Object»[options]
«Object» オプション。Query.prototype.setOptions()
を参照してください。[options.returnDocument='before']
«String»'before'
および'after'
の 2 つの可能な値があります。デフォルトでは、更新が適用される前のドキュメントが返されます。[options.lean]
«Object» 真の場合、mongoose はドキュメントを mongoose ドキュメントではなくプレーンな JavaScript オブジェクトとして返します。Query.lean()
および Mongoose lean チュートリアル を参照してください。[options.session=null]
«ClientSession» このクエリに関連付けられたセッション。 トランザクションドキュメントを参照してください。[options.strict]
«Boolean|String» スキーマの 厳密モードオプションを上書きします[options.timestamps=null]
«Boolean»false
に設定され、スキーマレベルのタイムスタンプが有効になっている場合、この更新のタイムスタンプをスキップします。これにより、タイムスタンプを上書きできることに注意してください。スキーマレベルのタイムスタンプが設定されていない場合は何も行いません。[options.upsert=false]
«Boolean» trueの場合、ドキュメントが見つからなければ新しいドキュメントを挿入します。[options.projection=null]
«Object|String|Array[String]» 返すオプションのフィールド。Query.prototype.select()
を参照してください。[options.new=false]
«Boolean» trueの場合、元のドキュメントではなく変更されたドキュメントを返します。[options.fields]
«Object|String» フィールド選択。.select(fields).findOneAndUpdate()
と同等です。[options.maxTimeMS]
«Number» クエリに時間制限を設定します - mongodb >= 2.6.0が必要です。[options.sort]
«Object|String» 条件によって複数のドキュメントが見つかった場合、更新するドキュメントを選択するためのソート順序を設定します。[options.runValidators]
«Boolean» true の場合、このコマンドで更新バリデータを実行します。更新バリデータは、モデルのスキーマに対して更新操作を検証します[options.setDefaultsOnInsert=true]
«Boolean»setDefaultsOnInsert
とupsert
が true の場合、新しいドキュメントが作成されると、mongoose はモデルのスキーマで指定されたデフォルトを適用します[options.includeResultMetadata]
«Boolean» trueの場合、MongoDBドライバーからの生の結果を返します。[options.translateAliases=null]
«Boolean»true
に設定すると、filter
、projection
、update
、およびdistinct
内のスキーマ定義エイリアスを変換します。エイリアスと生のプロパティの両方が同じオブジェクトで定義されている場合に競合が発生すると、エラーがスローされます。[options.overwriteDiscriminatorKey=false]
«Boolean» Mongooseはデフォルトでupdate
からdiscriminatorキーの更新を削除します。discriminatorキーの更新を許可するには、overwriteDiscriminatorKey
をtrue
に設定します。
戻り値
- «Query»
参照
mongodbのfindOneAndUpdateコマンドを発行します。
一致するドキュメントを検索し、update
引数に従って更新し、任意のoptions
を渡し、見つかったドキュメント(存在する場合)をコールバックに返します。 callback
が渡された場合にクエリが実行され、それ以外の場合はQueryオブジェクトが返されます。
例
A.findOneAndUpdate(conditions, update, options) // returns Query
A.findOneAndUpdate(conditions, update) // returns Query
A.findOneAndUpdate() // returns Query
注意
atomic
操作名ではないすべてのトップレベルの更新キーは、設定操作として扱われます。
例
const query = { name: 'borne' };
Model.findOneAndUpdate(query, { name: 'jason bourne' }, options)
// is sent as
Model.findOneAndUpdate(query, { $set: { name: 'jason bourne' }}, options)
注意
findOneAndX
およびfindByIdAndX
関数は、runValidators
オプションを設定することで有効にできる限定的な検証をサポートしています。
本格的な検証が必要な場合は、最初にドキュメントを取得する従来のアプローチを使用してください。
const doc = await Model.findById(id);
doc.name = 'jason bourne';
await doc.save();
Model.hydrate()
パラメータ
obj
«Object»[projection]
«Object|String|Array[String]» このドキュメントで選択する必要があるフィールドを含むオプションのプロジェクション。[options]
«Object» オプションのオプション。[options.setters=false]
«Boolean» trueの場合、ハイドレーション時にスキーマセッターを適用します。[options.hydratedPopulatedDocs=false]
«Boolean» trueの場合、事前に入力されたデータを渡す場合、ドキュメントをポピュレートします。
戻り値
- «Document» ドキュメントインスタンス。
DBに事前に保存されている既存の生データから新しいドキュメントを作成するためのショートカット。返されたドキュメントには、最初に変更されたとマークされたパスはありません。
例
// hydrate previous data into a Mongoose document
const mongooseCandy = Candy.hydrate({ _id: '54108337212ffb6d459f854c', type: 'jelly bean' });
Model.init()
この関数は、スキーマオプションに基づいてMongoDBの基盤となる接続を初期化する役割を担っています。この関数は、次の操作を実行します。
autoCreate
オプションがオフにされていない限り、createCollection()
を実行します。autoIndex
オプションがオフにされていない限り、ensureIndexes()
を実行します。autoSearchIndex
が有効になっている場合、すべてのスキーマ検索インデックスでcreateSearchIndex()
を実行します。
Mongooseは、mongoose.model()
またはconnection.model()
を使用してモデルが作成されると、この関数を自動的に呼び出すため、インデックスの構築をトリガーするためにinit()
を呼び出す必要はありません。
ただし、インデックスが完了したときに解決されるPromiseを取得するために、init()
を呼び出す必要がある場合があります。インデックスが構築されるのを待ってから続行する必要がある場合は、await Model.init()
を呼び出すと役立ちます。たとえば、一意のインデックスが構築されるのを待ってからテストケースを続行する場合などです。
例
const eventSchema = new Schema({ thing: { type: 'string', unique: true } })
// This calls `Event.init()` implicitly, so you don't need to call
// `Event.init()` on your own.
const Event = mongoose.model('Event', eventSchema);
await Event.init();
console.log('Indexes are done building!');
Model.insertMany()
パラメータ
doc(s)
«Array|Object|[object Object]»[options]
«Object» mongodbドライバーオプションを参照してください。[options.ordered=true]
«Boolean» trueの場合、最初に発生したエラーで即座に失敗します。falseの場合、挿入できるすべてのドキュメントを挿入し、後でエラーを報告します。ordered = false
のinsertMany()
は、「順不同」のinsertMany()
と呼ばれます。[options.rawResult=false]
«Boolean» falseの場合、返されたpromiseはmongooseドキュメント検証に合格したドキュメントに解決されます。true
の場合、MongoDBドライバーからの生の結果を返します。これには、順不同のinsertMany
の場合、validationErrors
とresults
を含むmongoose
プロパティが含まれています。[options.lean=false]
«Boolean»true
の場合、ドキュメントのハイドレーションをスキップします。これは、MongooseがinsertMany()
に渡されたドキュメントに対してキャスト、検証、またはデフォルトの適用を行わないことを意味します。このオプションは、追加のパフォーマンスが必要な場合に役立ちますが、データの整合性リスクが伴います。castObject()
とapplyDefaults()
と組み合わせて使用することを検討してください。[options.limit=null]
«Number» これは、Mongooseが並行して処理するドキュメントの数(検証/キャスト)を制限します。これは、MongoDBにドキュメントをバッチで送信するものではありません。多数のドキュメントを処理していて、アプリのメモリが不足している場合は、このオプションを使用してください。[options.populate=null]
«String|Object|Array» 結果のドキュメントをポピュレートします。このオプションは、rawResult
が設定されている場合は何もしません。[options.throwOnValidationError=false]
«Boolean» trueでordered: false
の場合、操作の1つが検証に失敗した場合でも、すべての有効な操作が正常に完了した場合にエラーをスローします。
戻り値
- «Promise»
options.rawResult
がtrue
の場合はMongoDBドライバーからの生の結果に解決され、それ以外の場合は検証に合格したドキュメントに解決されます。
ドキュメントの配列を検証し、すべて有効な場合にMongoDBに挿入するためのショートカット。この関数は、ドキュメントごとに1つではなく、1つの操作のみをサーバーに送信するため、.create()
よりも高速です。
Mongooseは、MongoDBにinsertMany
を送信する前に、常に各ドキュメントを検証します。したがって、1つのドキュメントに検証エラーがある場合、ordered
オプションをfalseに設定しない限り、ドキュメントは保存されません。
この関数は、saveミドルウェアをトリガーしません。
この関数は、以下のミドルウェアをトリガーします。
insertMany()
例
const docs = await Movies.insertMany([
{ name: 'Star Wars' },
{ name: 'The Empire Strikes Back' }
]);
docs[0].name; // 'Star Wars'
// Return raw result from MongoDB
const result = await Movies.insertMany([
{ name: 'Star Wars' },
{ name: 'The Empire Strikes Back' }
], { rawResult: true });
Model.inspect()
console.logのヘルパー。 「MyModel」という名前のモデルが指定されると、文字列'Model { MyModel }'
を返します。
例
const MyModel = mongoose.model('Test', Schema({ name: String }));
MyModel.inspect(); // 'Model { Test }'
console.log(MyModel); // Prints 'Model { Test }'
Model.listIndexes()
戻り値
- «Promise»
現在MongoDBで定義されているインデックスを一覧表示します。これは、autoIndex
オプションを使用しているかどうか、および手動でインデックスを構築しているかどうかによって、スキーマで定義されているインデックスと同じである場合とそうでない場合があります。
Model.listSearchIndexes()
パラメータ
[options]
«Object»
戻り値
- «Promise<Array>»
このモデルのコレクションに対するすべてのAtlas検索インデックスをリストします。この関数は、MongoDB Atlasに接続している場合にのみ機能します。
例
const schema = new Schema({ name: { type: String, unique: true } });
const Customer = mongoose.model('Customer', schema);
await Customer.createSearchIndex({ name: 'test', definition: { mappings: { dynamic: true } } });
const res = await Customer.listSearchIndexes(); // Includes `[{ name: 'test' }]`
Model.populate()
パラメータ
docs
«Document|Array» ポピュレートする単一のドキュメントまたはドキュメントの配列。options
«Object|String» ポピュレートするパス、またはすべてのパラメータを指定するオブジェクト。[options.path=null]
«string» ポピュレートするパス。[options.populate=null]
«string|PopulateOptions» ポピュレートされたドキュメント内のパスを再帰的にポピュレートします。ディープポピュレートドキュメントを参照してください。[options.retainNullValues=false]
«boolean» デフォルトでは、Mongooseはポピュレートされた配列からnullおよびundefinedの値を削除します。このオプションを使用すると、populate()
でnull
およびundefined
の配列エントリが保持されます。[options.getters=false]
«boolean» trueの場合、MongooseはlocalField
で定義されたゲッターを呼び出します。デフォルトでは、MongooseはlocalField
の生の値を取得します。たとえば、lowercase
ゲッターをlocalField
に追加したい場合は、このオプションをtrue
に設定する必要があります。[options.clone=false]
«boolean»BlogPost.find().populate('author')
を実行すると、同じ作成者のブログ投稿はauthor
ドキュメントの1つのコピーを共有します。このオプションを有効にすると、Mongooseはポピュレートされたドキュメントを割り当てる前にクローンします。[options.match=null]
«Object|Function» ポピュレートクエリに追加のフィルターを追加します。MongoDBクエリ構文を含むフィルターオブジェクト、またはフィルターオブジェクトを返す関数にすることができます。[options.skipInvalidIds=false]
«Boolean» デフォルトでは、MongooseはlocalField
とforeignField
のスキーマが一致しない場合にキャストエラーをスローします。このオプションを有効にすると、Mongooseは代わりに、foreignField
のスキーマタイプにキャストできないlocalField
プロパティをすべて除外します。[options.perDocumentLimit=null]
«Number» レガシーの理由により、populate()
を使用したlimit
は、ポピュレートされているすべてのドキュメントに対して1つのクエリのみを実行するため、誤った結果を返す可能性があります。perDocumentLimit
を設定すると、Mongooseは、populate()
する各ドキュメントに対して個別のクエリを実行することにより、ドキュメントごとの正しいlimit
を保証します。たとえば、.find().populate({ path: 'test', perDocumentLimit: 2 })
は、.find()
が2つのドキュメントを返す場合、2つの追加クエリを実行します。[options.strictPopulate=true]
«Boolean» 指定されたモデルのスキーマで定義されていないパスへのポピュレートを許可するには、false に設定します。[options.options=null]
«Object»limit
やlean
などの追加オプション。[options.transform=null]
«Function» ポピュレートされたドキュメントを変換するために、Mongoose がすべてのポピュレートされたドキュメントに対して呼び出す関数。[callback(err,doc)]
«Function» オプションのコールバックで、完了時に実行されます。err
とdoc(s)
を受け取ります。
戻り値
- «Promise»
ドキュメント参照をポピュレートします。
Mongoose 6 での変更点: populate()
を呼び出すモデルは、「外部フィールド」モデル**ではなく**、「ローカルフィールド」モデルである必要があります。
利用可能なトップレベルオプション
- path: ポピュレートするスペース区切りのパス
- select: 選択するオプションのフィールド
- match: 一致させるオプションのクエリ条件
- model: ポピュレーションに使用するオプションのモデル名
- options: sort、limit などのオプションのクエリオプション
- justOne: オプションのブール値で、true の場合、Mongoose は常に
path
をドキュメントに設定するか、ドキュメントが見つからない場合はnull
に設定します。false の場合、Mongoose は常にpath
を配列に設定し、ドキュメントが見つからない場合は空になります。デフォルトではスキーマから推測されます。 - strictPopulate: オプションのブール値で、
false
に設定すると、スキーマにないパスのポピュレートを許可します。
例
const Dog = mongoose.model('Dog', new Schema({ name: String, breed: String }));
const Person = mongoose.model('Person', new Schema({
name: String,
pet: { type: mongoose.ObjectId, ref: 'Dog' }
}));
const pets = await Pet.create([
{ name: 'Daisy', breed: 'Beagle' },
{ name: 'Einstein', breed: 'Catalan Sheepdog' }
]);
// populate many plain objects
const users = [
{ name: 'John Wick', dog: pets[0]._id },
{ name: 'Doc Brown', dog: pets[1]._id }
];
await User.populate(users, { path: 'dog', select: 'name' });
users[0].dog.name; // 'Daisy'
users[0].dog.breed; // undefined because of `select`
Model.prototype.$model()
パラメータ
[name]
«String» モデル名
戻り値
- «Model»
name
が指定されていない場合は、このドキュメントの作成に使用されたモデルインスタンスを返します。name
が指定されている場合は、指定された name
のモデルを返します。
例
const doc = new Tank({});
doc.$model() === Tank; // true
await doc.$model('User').findById(id);
Model.prototype.$where
Type
- «property»
save()
を呼び出し、isNew
が false の場合にクエリに追加する追加のプロパティ。
Model.prototype.base
Type
- «property»
モデルが使用するベース Mongoose インスタンス。
Model.prototype.baseModelName
Type
- «property»
これが識別子モデルである場合、baseModelName
はベースモデルの名前です。
Model.prototype.collection
Type
- «property»
このモデルが使用するコレクションインスタンス。Mongoose コレクションは、[MongoDB Node.js ドライバー コレクション](MongoDB Node.js ドライバー コレクション) を薄くラップしたものです。Model.collection
を使用すると、Mongoose ミドルウェア、検証、およびキャスティングをバイパスすることになります。
このプロパティは読み取り専用です。このプロパティを変更しても効果はありません。
Model.prototype.collection
Type
- «property»
モデルが使用するコレクション。
Model.prototype.db
Type
- «property»
モデルが使用する接続。
Model.prototype.deleteOne()
戻り値
- «Query» クエリ
Model.prototype.discriminators
Type
- «property»
このモデルに登録された識別子。
Model.prototype.increment()
参照
このドキュメントのバージョンをインクリメントすることを要求するシグナル。
例
const doc = await Model.findById(id);
doc.increment();
await doc.save();
Model.prototype.model()
パラメータ
[name]
«String» モデル名
戻り値
- «Model»
name
が指定されていない場合は、このドキュメントの作成に使用されたモデルインスタンスを返します。name
が指定されている場合は、指定された name
のモデルを返します。
例
const doc = new Tank({});
doc.$model() === Tank; // true
await doc.$model('User').findById(id);
Model.prototype.modelName
Type
- «property»
モデルの名前
Model.prototype.save()
パラメータ
[options]
«Object» オプションのオプション[options.session=null]
«Session» この保存操作に関連付けられた セッション。指定されていない場合は、ドキュメントに関連付けられたセッションがデフォルトになります。[options.safe]
«Object» (非推奨) スキーマの safe オプションを上書きします。代わりにw
オプションを使用してください。[options.validateBeforeSave]
«Boolean» 検証せずに保存するには false に設定します。[options.validateModifiedOnly=false]
«Boolean»true
の場合、Mongoose は変更されたパスとrequired
パスではなく、変更されたパスのみを検証します。[options.w]
«Number|String» 書き込み確認を設定します。スキーマレベルのwriteConcern
オプションを上書きします。[options.j]
«Boolean» このsave()
が ジャーナルに書き込まれるまで MongoDB が待機してから、返された promise を解決するように設定します。スキーマレベルのwriteConcern
オプションを上書きします。[options.wtimeout]
«Number» 書き込み確認のタイムアウトを設定します。スキーマレベルのwriteConcern
オプションを上書きします。[options.checkKeys=true]
«Boolean» MongoDB ドライバーでは、デフォルトで '$' で始まるキーまたは '.' を含むキーを保存できません。このオプションをfalse
に設定すると、そのチェックをスキップします。フィールド名の制限事項を参照してください。[options.timestamps=true]
«Boolean»false
の場合、タイムスタンプが有効になっている場合は、このsave()
のタイムスタンプをスキップします。[options.pathsToSave]
«Array» Mongoose にpathsToSave
のパスのみを検証して保存するように指示するパスの配列。
戻り値
- «Promise»
参照
document.isNew が true
の場合は、新しいドキュメントをデータベースに挿入してこのドキュメントを保存するか、isNew
が false
の場合は、変更されたパスのみを含む updateOne 操作を送信します。
例
product.sold = Date.now();
product = await product.save();
保存が成功した場合、返された promise は保存されたドキュメントで完了します。
例
const newProduct = await product.save();
newProduct === product; // true
Model.recompileSchema()
戻り値
- «undefined,void»
このモデルのコンパイル後に、このモデルのスキーマに加えられた変更を適用します。デフォルトでは、モデルのコンパイル後に仮想プロパティやその他のプロパティをスキーマに追加しても何も起こりません。後で追加された仮想プロパティやプロパティを適用するには、この関数を呼び出します。
例
const schema = new mongoose.Schema({ field: String });
const TestModel = mongoose.model('Test', schema);
TestModel.schema.virtual('myVirtual').get(function() {
return this.field + ' from myVirtual';
});
const doc = new TestModel({ field: 'Hello' });
doc.myVirtual; // undefined
TestModel.recompileSchema();
doc.myVirtual; // 'Hello from myVirtual'
Model.replaceOne()
パラメータ
filter
«Object»doc
«Object»[options]
«Object» オプション。Query.prototype.setOptions()
を参照してください。[options.strict]
«Boolean|String» スキーマの 厳密モードオプションを上書きします[options.upsert=false]
«Boolean» trueの場合、ドキュメントが見つからなければ新しいドキュメントを挿入します。[options.writeConcern=null]
«Object» レプリカセットの 書き込み確認を設定します。スキーマレベルの書き込み確認を上書きします。[options.timestamps=null]
«Boolean»false
に設定され、スキーマレベルのタイムスタンプが有効になっている場合は、この更新のタイムスタンプをスキップします。スキーマレベルのタイムスタンプが設定されていない場合は何も実行しません。[options.translateAliases=null]
«Boolean»true
に設定すると、filter
、projection
、update
、およびdistinct
内のスキーマ定義エイリアスを変換します。エイリアスと生のプロパティの両方が同じオブジェクトで定義されている場合に競合が発生すると、エラーがスローされます。
戻り値
- «Query»
参照
既存のドキュメントを指定されたドキュメントに置き換えます ($set
のようなアトミック演算子はありません)。
例
const res = await Person.replaceOne({ _id: 24601 }, { name: 'Jean Valjean' });
res.matchedCount; // Number of documents matched
res.modifiedCount; // Number of documents modified
res.acknowledged; // Boolean indicating the MongoDB server received the operation.
res.upsertedId; // null or an id containing a document that had to be upserted.
res.upsertedCount; // Number indicating how many documents had to be upserted. Will either be 0 or 1.
この関数は、以下のミドルウェアをトリガーします。
replaceOne()
Model.schema
Type
- «property»
モデルが使用するスキーマ。
Model.startSession()
パラメータ
[options]
«Object» mongodb ドライバーオプションを参照してください。[options.causalConsistency=true]
«Boolean» 因果関係の一貫性を無効にするには false に設定します。
戻り値
- «Promise<ClientSession>» MongoDB ドライバーの
ClientSession
に解決される promise
MongoDB >= 3.6.0 が必要です。因果関係の一貫性、再試行可能な書き込み、および トランザクションなどの利点のために、MongoDB セッションを開始します。
MyModel.startSession()
を呼び出すことは、MyModel.db.startSession()
を呼び出すことと同じです。
この関数は、ミドルウェアをトリガーしません。
例
const session = await Person.startSession();
let doc = await Person.findOne({ name: 'Ned Stark' }, null, { session });
await doc.remove();
// `doc` will always be null, even if reading from a replica set
// secondary. Without causal consistency, it is possible to
// get a doc back from the below query if the query reads from a
// secondary that is experiencing replication lag.
doc = await Person.findOne({ name: 'Ned Stark' }, null, { session, readPreference: 'secondary' });
Model.syncIndexes()
パラメータ
[options]
«Object»ensureIndexes()
に渡すオプション[options.background=null]
«Boolean» 指定された場合、各インデックスのbackground
プロパティを上書きします
戻り値
- «Promise»
MongoDB のインデックスが、このモデルのスキーマで定義されたインデックスと一致するようにします。この関数は、モデルのスキーマで定義されていないインデックスを _id
インデックスを除いて削除し、スキーマに存在するが MongoDB に存在しないインデックスを構築します。
詳細については、紹介ブログ記事を参照してください。
例
const schema = new Schema({ name: { type: String, unique: true } });
const Customer = mongoose.model('Customer', schema);
await Customer.collection.createIndex({ age: 1 }); // Index is not in schema
// Will drop the 'age' index and create an index on `name`
await Customer.syncIndexes();
インデックスの構築はコストのかかる操作であり、予期しないインデックスの削除はパフォーマンスの低下につながる可能性があるため、負荷の高い実稼働アプリケーションで syncIndexes()
を実行する場合は注意が必要です。syncIndexes()
を実行する前に、diffIndexes()
関数を使用して、syncIndexes()
が削除および作成するインデックスを確認できます。
例
const { toDrop, toCreate } = await Model.diffIndexes();
toDrop; // Array of strings containing names of indexes that `syncIndexes()` will drop
toCreate; // Array of strings containing names of indexes that `syncIndexes()` will create
Model.translateAliases()
パラメータ
fields
«Object» エイリアスキーを含む可能性があるフィールド/条件[errorOnDuplicates]
«Boolean» true の場合、fields
にキーとエイリアスの両方が存在するとエラーをスローします。
戻り値
- «Object» 変換された「純粋な」フィールド/条件
最終的なクエリまたはドキュメントオブジェクトが純粋になるように、エイリアスフィールド/条件を変換します
例
await Character.find(Character.translateAliases({
'名': 'Eddard Stark' // Alias for 'name'
});
デフォルトでは、translateAliases()
は生のフィールドをエイリアスフィールドで上書きします。したがって、n
が name
のエイリアスの場合、{ n: 'alias', name: 'raw' }
は { name: 'alias' }
に解決されます。ただし、競合する可能性のあるパスが存在する場合は、errorOnDuplicates
オプションを設定してエラーをスローすることができます。クエリの translateAliases
オプションは、errorOnDuplicates
を使用します。
注意
オブジェクト型の引数のみを変換し、それ以外のものは生のまま返されます
Model.updateMany()
パラメータ
filter
«Object»update.
«Object|Array» 配列の場合、この更新は更新パイプラインとして扱われ、キャストされません。[options]
«Object» オプション。Query.prototype.setOptions()
を参照してください。[options.strict]
«Boolean|String» スキーマの 厳密モードオプションを上書きします[options.upsert=false]
«Boolean» trueの場合、ドキュメントが見つからなければ新しいドキュメントを挿入します。[options.writeConcern=null]
«Object» レプリカセットの 書き込み確認を設定します。スキーマレベルの書き込み確認を上書きします。[options.timestamps=null]
«Boolean»false
に設定され、スキーマレベルのタイムスタンプが有効になっている場合は、この更新のタイムスタンプをスキップします。スキーマレベルのタイムスタンプが設定されていない場合は何も実行しません。[options.translateAliases=null]
«Boolean»true
に設定すると、filter
、projection
、update
、およびdistinct
内のスキーマ定義エイリアスを変換します。エイリアスと生のプロパティの両方が同じオブジェクトで定義されている場合に競合が発生すると、エラーがスローされます。[options.overwriteDiscriminatorKey=false]
«Boolean» Mongooseはデフォルトでupdate
からdiscriminatorキーの更新を削除します。discriminatorキーの更新を許可するには、overwriteDiscriminatorKey
をtrue
に設定します。
戻り値
- «Query»
参照
updateOne()
と同じですが、MongoDB は filter
に一致するすべてのドキュメントを (最初のドキュメントだけでなく) multi
オプションの値に関係なく更新します。
注意 updateMany は更新ミドルウェアを起動しません。代わりに pre('updateMany')
と post('updateMany')
を使用してください。
例
const res = await Person.updateMany({ name: /Stark$/ }, { isDeleted: true });
res.matchedCount; // Number of documents matched
res.modifiedCount; // Number of documents modified
res.acknowledged; // Boolean indicating the MongoDB server received the operation. This may be false if Mongoose did not send an update to the server because the update was empty.
res.upsertedId; // null or an id containing a document that had to be upserted.
res.upsertedCount; // Number indicating how many documents had to be upserted. Will either be 0 or 1.
この関数は、以下のミドルウェアをトリガーします。
updateMany()
Model.updateOne()
パラメータ
filter
«Object»update.
«Object|Array» 配列の場合、この更新は更新パイプラインとして扱われ、キャストされません。[options]
«Object» オプション。Query.prototype.setOptions()
を参照してください。[options.strict]
«Boolean|String» スキーマの 厳密モードオプションを上書きします[options.upsert=false]
«Boolean» trueの場合、ドキュメントが見つからなければ新しいドキュメントを挿入します。[options.writeConcern=null]
«Object» レプリカセットの 書き込み確認を設定します。スキーマレベルの書き込み確認を上書きします。[options.timestamps=null]
«Boolean»false
に設定され、スキーマレベルのタイムスタンプが有効になっている場合、この更新のタイムスタンプをスキップします。これにより、タイムスタンプを上書きできることに注意してください。スキーマレベルのタイムスタンプが設定されていない場合は何も行いません。[options.translateAliases=null]
«Boolean»true
に設定すると、filter
、projection
、update
、およびdistinct
内のスキーマ定義エイリアスを変換します。エイリアスと生のプロパティの両方が同じオブジェクトで定義されている場合に競合が発生すると、エラーがスローされます。[options.overwriteDiscriminatorKey=false]
«Boolean» Mongooseはデフォルトでupdate
からdiscriminatorキーの更新を削除します。discriminatorキーの更新を許可するには、overwriteDiscriminatorKey
をtrue
に設定します。
戻り値
- «Query»
参照
filter
に一致する最初のドキュメントのみを更新します。
$set
のようなアトミック演算子を使用するのではなく、ドキュメント全体を上書きする場合は、replaceOne()
を使用します。
例
const res = await Person.updateOne({ name: 'Jean-Luc Picard' }, { ship: 'USS Enterprise' });
res.matchedCount; // Number of documents matched
res.modifiedCount; // Number of documents modified
res.acknowledged; // Boolean indicating the MongoDB server received the operation. This may be false if Mongoose did not send an update to the server because the update was empty.
res.upsertedId; // null or an id containing a document that had to be upserted.
res.upsertedCount; // Number indicating how many documents had to be upserted. Will either be 0 or 1.
この関数は、以下のミドルウェアをトリガーします。
updateOne()
Model.updateSearchIndex()
パラメータ
name
«String»definition
«Object»
戻り値
- «Promise»
既存の Atlas 検索インデックスを更新します。この関数は、MongoDB Atlas に接続されている場合にのみ機能します。
例
const schema = new Schema({ name: { type: String, unique: true } });
const Customer = mongoose.model('Customer', schema);
await Customer.updateSearchIndex('test', { mappings: { dynamic: true } });
Model.validate()
パラメータ
obj
«Object»pathsOrOptions
«Object|Array|String»[context]
«Object»
戻り値
- «Promise<Object>» 検証に成功した場合の、
obj
のキャストおよび検証済みのコピー
このモデルのスキーマに対して、指定されたオブジェクトをキャストおよび検証し、カスタムバリデーターに指定された context
を渡します。
例
const Model = mongoose.model('Test', Schema({
name: { type: String, required: true },
age: { type: Number, required: true }
});
try {
await Model.validate({ name: null }, ['name'])
} catch (err) {
err instanceof mongoose.Error.ValidationError; // true
Object.keys(err.errors); // ['name']
}
Model.watch()
パラメータ
[pipeline]
«Array»[options]
«Object» mongodb ドライバーオプションを参照してください。[options.hydrate=false]
«Boolean» true でfullDocument: 'updateLookup'
が設定されている場合、Mongoose は自動的にfullDocument
を本格的な Mongoose ドキュメントにハイドレートします
戻り値
- «ChangeStream» EventEmitter から継承された、mongoose 固有の変更ストリームラッパー
MongoDB >= 3.6.0 を実行しているレプリカセットが必要です。MongoDB 変更ストリームを使用して、基になるコレクションの変更を監視します。
この関数は、ミドルウェアをトリガーしません。特に、集計ミドルウェアをトリガーしません。
ChangeStream オブジェクトは、次のイベントを発生させるイベントエミッターです。
- 'change': 変更が発生しました。以下の例を参照してください
- 'error': 回復不能なエラーが発生しました。特に、変更ストリームは現在、レプリカセットプライマリへの接続が失われた場合にエラーになります。更新については、この GitHub issue を参照してください。
- 'end': 基になるストリームが閉じられた場合に発生します
- 'close': 基になるストリームが閉じられた場合に発生します
例
const doc = await Person.create({ name: 'Ned Stark' });
const changeStream = Person.watch().on('change', change => console.log(change));
// Will print from the above `console.log()`:
// { _id: { _data: ... },
// operationType: 'delete',
// ns: { db: 'mydb', coll: 'Person' },
// documentKey: { _id: 5a51b125c5500f5aa094c7bd } }
await doc.remove();
Model.where()
パラメータ
path
«String»[val]
«Object» オプションの値
戻り値
- «Query»
クエリを作成し、渡された条件を適用して、クエリを返します。
たとえば、次のように記述する代わりに
User.find({ age: { $gte: 21, $lte: 65 } });
代わりに次のように記述できます
User.where('age').gte(21).lte(65).exec();
Query クラスも where
をサポートしているため、チェーンを続けることができます
User
.where('age').gte(21).lte(65)
.where('name', /^b/i)
... etc