モデル


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 はドキュメントにタイムスタンプを追加/更新しません。

戻り値
  • «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.updateMany.filter] «Object» このフィルターに一致するすべてのドキュメントを更新します。

    • [ops.updateMany.update] «Object» 更新演算子を含むオブジェクト。

    • [ops.updateMany.upsert=false] «Boolean» true の場合、filter に一致するドキュメントがない場合はドキュメントを挿入します。

    • [ops.updateMany.timestamps=true] «Boolean» false の場合、操作にタイムスタンプを適用しません。

    • [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.skipValidation=false] «Boolean» 一括書き込み操作で Mongoose スキーマのバリデーションをスキップする場合は true に設定します。Mongoose は現在、デフォルトで insertOne および replaceOne 操作でバリデーションを実行します。

    • [options.throwOnValidationError=false] «Boolean» true で、ordered: false の場合、操作の 1 つがバリデーションに失敗したが、すべての有効な操作が正常に完了した場合にエラーをスローします。Mongoose は、すべての有効な操作を MongoDB サーバーに送信することに注意してください。

    • [options.strict=null] «Boolean|[object Object]» スキーマのstrict オプションを上書きします。false の場合、この一括処理のすべての書き込みについて、スキーマで定義されていないフィールドのフィルタリングと書き込みを許可します。

戻り値

複数の insertOneupdateOneupdateManyreplaceOnedeleteOne、および/または deleteMany 操作を 1 つのコマンドで MongoDB サーバーに送信します。これは、bulkWrite() では MongoDB へのラウンドトリップが 1 回しかないため、複数の独立した操作 (たとえば、create() を使用する場合) を送信するよりも高速です。

Mongoose は、提供するすべての操作でキャスティングを実行します。唯一の例外は、updateOne または updateManyupdate 演算子をパイプラインに設定する場合です。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() がサポートしていない演算子と、推奨される代替手段です。


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()

パラメータ

このモデルのコレクションを作成します。デフォルトでは、インデックスが指定されていない場合、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 に設定すると、filterprojectionupdate、および 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 に設定すると、filterprojectionupdate、および 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»

distinct 操作のクエリを作成します。

const query = Link.distinct('url');
query.exec();

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();

完了後、エラーが発生した場合は、この Modelindex イベントが発行され、エラーが渡されます。

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()

パラメータ
戻り値
  • «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 に設定すると、filterprojectionupdate、および 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.translateAliases=null] «Boolean» true に設定すると、filterprojectionupdate、および 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.timestamps=null] «Boolean» false に設定され、スキーマレベルのタイムスタンプが有効になっている場合、この更新のタイムスタンプをスキップします。これにより、タイムスタンプを上書きできることに注意してください。スキーマレベルのタイムスタンプが設定されていない場合は何も行いません。

    • [options.sort] «Object|String» 条件によって複数のドキュメントが見つかった場合、更新するドキュメントを選択するためのソート順序を設定します。

    • [options.runValidators] «Boolean» true の場合、このコマンドで更新バリデータを実行します。更新バリデータは、モデルのスキーマに対して更新操作を検証します

    • [options.setDefaultsOnInsert=true] «Boolean» setDefaultsOnInsertupsert が true の場合、新しいドキュメントが作成されると、mongoose はモデルのスキーマで指定されたデフォルトを適用します

    • [options.upsert=false] «Boolean» trueの場合、ドキュメントが見つからなければ新しいドキュメントを挿入します。

    • [options.new=false] «Boolean» trueの場合、元のドキュメントではなく変更されたドキュメントを返します。

    • [options.select] «Object|String» 返すドキュメントのフィールドを設定します。

    • [options.translateAliases=null] «Boolean» true に設定すると、filterprojectionupdate、および distinct 内のスキーマ定義エイリアスを変換します。エイリアスと生のプロパティの両方が同じオブジェクトで定義されている場合に競合が発生すると、エラーがスローされます。

    • [options.overwriteDiscriminatorKey=false] «Boolean» Mongooseはデフォルトでupdateからdiscriminatorキーの更新を削除します。discriminatorキーの更新を許可するには、overwriteDiscriminatorKeytrueに設定します。

戻り値
  • «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 に設定すると、filterprojectionupdate、および 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.projection=null] «Object|String|Array[String]» 返すオプションのフィールド。 Query.prototype.select()を参照してください。

    • [options.sort] «Object|String» 条件によって複数のドキュメントが見つかった場合、更新するドキュメントを選択するためのソート順序を設定します。

    • [options.select] «Object|String» 返すドキュメントのフィールドを設定します。

    • [options.maxTimeMS] «Number» クエリに時間制限を設定します - mongodb >= 2.6.0が必要です。

    • [options.translateAliases=null] «Boolean» true に設定すると、filterprojectionupdate、および 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.timestamps=null] «Boolean» false に設定され、スキーマレベルのタイムスタンプが有効になっている場合、この更新のタイムスタンプをスキップします。これにより、タイムスタンプを上書きできることに注意してください。スキーマレベルのタイムスタンプが設定されていない場合は何も行いません。

    • [options.projection=null] «Object|String|Array[String]» 返すオプションのフィールド。 Query.prototype.select()を参照してください。

    • [options.sort] «Object|String» 条件によって複数のドキュメントが見つかった場合、更新するドキュメントを選択するためのソート順序を設定します。

    • [options.select] «Object|String» 返すドキュメントのフィールドを設定します。

    • [options.maxTimeMS] «Number» クエリに時間制限を設定します - mongodb >= 2.6.0が必要です。

    • [options.translateAliases=null] «Boolean» true に設定すると、filterprojectionupdate、および 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.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» setDefaultsOnInsertupsert が true の場合、新しいドキュメントが作成されると、mongoose はモデルのスキーマで指定されたデフォルトを適用します

    • [options.translateAliases=null] «Boolean» true に設定すると、filterprojectionupdate、および distinct 内のスキーマ定義エイリアスを変換します。エイリアスと生のプロパティの両方が同じオブジェクトで定義されている場合に競合が発生すると、エラーがスローされます。

    • [options.overwriteDiscriminatorKey=false] «Boolean» Mongooseはデフォルトでupdateからdiscriminatorキーの更新を削除します。discriminatorキーの更新を許可するには、overwriteDiscriminatorKeytrueに設定します。

戻り値
  • «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 = falseinsertMany()は、「順不同」のinsertMany()と呼ばれます。

    • [options.rawResult=false] «Boolean» falseの場合、返されたpromiseはmongooseドキュメント検証に合格したドキュメントに解決されます。 trueの場合、MongoDBドライバーからの生の結果を返します。これには、順不同のinsertManyの場合、validationErrorsresultsを含む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.rawResulttrueの場合は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.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はlocalFieldforeignFieldのスキーマが一致しない場合にキャストエラーをスローします。このオプションを有効にすると、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» limitlean などの追加オプション。

    • [options.transform=null] «Function» ポピュレートされたドキュメントを変換するために、Mongoose がすべてのポピュレートされたドキュメントに対して呼び出す関数。

  • [callback(err,doc)] «Function» オプションのコールバックで、完了時に実行されます。errdoc(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» クエリ

このドキュメントを DB から削除します。

await product.deleteOne();
await Product.findById(product._id); // null

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()

パラメータ
戻り値
  • «Promise»
参照

document.isNewtrue の場合は、新しいドキュメントをデータベースに挿入してこのドキュメントを保存するか、isNewfalse の場合は、変更されたパスのみを含む 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.upsert=false] «Boolean» trueの場合、ドキュメントが見つからなければ新しいドキュメントを挿入します。

    • [options.timestamps=null] «Boolean» false に設定され、スキーマレベルのタイムスタンプが有効になっている場合は、この更新のタイムスタンプをスキップします。スキーマレベルのタイムスタンプが設定されていない場合は何も実行しません。

    • [options.translateAliases=null] «Boolean» true に設定すると、filterprojectionupdate、および 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() は生のフィールドをエイリアスフィールドで上書きします。したがって、nname のエイリアスの場合、{ n: 'alias', name: 'raw' }{ name: 'alias' } に解決されます。ただし、競合する可能性のあるパスが存在する場合は、errorOnDuplicates オプションを設定してエラーをスローすることができます。クエリの translateAliases オプションは、errorOnDuplicates を使用します。

注意

オブジェクト型の引数のみを変換し、それ以外のものは生のまま返されます


Model.updateMany()

パラメータ
  • filter «Object»
  • update. «Object|Array» 配列の場合、この更新は更新パイプラインとして扱われ、キャストされません。

  • [options] «Object» オプション。 Query.prototype.setOptions() を参照してください。

    • [options.upsert=false] «Boolean» trueの場合、ドキュメントが見つからなければ新しいドキュメントを挿入します。

    • [options.timestamps=null] «Boolean» false に設定され、スキーマレベルのタイムスタンプが有効になっている場合は、この更新のタイムスタンプをスキップします。スキーマレベルのタイムスタンプが設定されていない場合は何も実行しません。

    • [options.translateAliases=null] «Boolean» true に設定すると、filterprojectionupdate、および distinct 内のスキーマ定義エイリアスを変換します。エイリアスと生のプロパティの両方が同じオブジェクトで定義されている場合に競合が発生すると、エラーがスローされます。

    • [options.overwriteDiscriminatorKey=false] «Boolean» Mongooseはデフォルトでupdateからdiscriminatorキーの更新を削除します。discriminatorキーの更新を許可するには、overwriteDiscriminatorKeytrueに設定します。

戻り値
  • «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.upsert=false] «Boolean» trueの場合、ドキュメントが見つからなければ新しいドキュメントを挿入します。

    • [options.timestamps=null] «Boolean» false に設定され、スキーマレベルのタイムスタンプが有効になっている場合、この更新のタイムスタンプをスキップします。これにより、タイムスタンプを上書きできることに注意してください。スキーマレベルのタイムスタンプが設定されていない場合は何も行いません。

    • [options.translateAliases=null] «Boolean» true に設定すると、filterprojectionupdate、および distinct 内のスキーマ定義エイリアスを変換します。エイリアスと生のプロパティの両方が同じオブジェクトで定義されている場合に競合が発生すると、エラーがスローされます。

    • [options.overwriteDiscriminatorKey=false] «Boolean» Mongooseはデフォルトでupdateからdiscriminatorキーの更新を削除します。discriminatorキーの更新を許可するには、overwriteDiscriminatorKeytrueに設定します。

戻り値
  • «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