ドキュメント


Document.prototype.$assertPopulated()

パラメータ
  • path «String|Array[String]» チェックするパスまたはパスの配列。$assertPopulated は、指定されたパスのいずれかがポピュレートされていない場合にエラーをスローします。

  • [values] «Object» オプションの $set() に設定する値。手動でパスをポピュレートし、そのパスが 1 回の呼び出しでポピュレートされたことをアサートする場合に便利です。

戻り値
  • «Document» this

指定されたパスがポピュレートされていない場合はエラーをスローします

const doc = await Model.findOne().populate('author');

doc.$assertPopulated('author'); // does not throw
doc.$assertPopulated('other path'); // throws an error

// Manually populate and assert in one call. The following does
// `doc.$set({ likes })` before asserting.
doc.$assertPopulated('likes', { likes });

Document.prototype.$clearModifiedPaths()

戻り値
  • «Document» this

ドキュメントの変更されたパスをクリアします。

const doc = await TestModel.findOne();

doc.name = 'test';
doc.$isModified('name'); // true

doc.$clearModifiedPaths();
doc.name; // 'test', `$clearModifiedPaths()` does **not** modify the document's data, only change tracking

Document.prototype.$clone()

戻り値
  • «Document» このドキュメントのコピー

_doc$__ のディープクローンを持つこのドキュメントのコピーを返します。


Document.prototype.$createModifiedPathsSnapshot()

戻り値
  • «ModifiedPathsSnapshot» このドキュメントの内部変更追跡状態のコピー

このドキュメントの内部変更追跡状態のスナップショットを作成します。後で、$restoreModifiedPathsSnapshot() を使用して、このドキュメントの変更追跡状態をリセットできます。

const doc = await TestModel.findOne();
const snapshot = doc.$createModifiedPathsSnapshot();

Document.prototype.$errors

タイプ
  • «property»

現在のバリデーションの $errors を含むハッシュ。


Document.prototype.$getAllSubdocs()

戻り値
  • «Array»

すべてのサブドキュメントを取得(bfsによる)


Document.prototype.$getPopulatedDocs()

戻り値
  • «Array[Document]» ポピュレートされたドキュメントの配列。このドキュメントに関連付けられたポピュレートされたドキュメントがない場合は空の配列。

このドキュメントに関連付けられたすべてのポピュレートされたドキュメントを取得します。


Document.prototype.$ignore()

パラメータ
  • path «String» 無視するパス

このパスでバリデーションを実行したり、このパスへの変更を永続化したりしないでください。

doc.foo = null;
doc.$ignore('foo');
doc.save(); // changes to foo will not be persisted and validators won't be run

Document.prototype.$inc()

パラメータ
  • path «String|Array» 更新するパスまたはパスの配列

  • val «Number» path をこの値で増分します

戻り値
  • «Document» this

path の数値値を指定された val で増分します。このドキュメントで save() を呼び出すと、Mongoose は $set ではなく $inc を送信します。

const schema = new Schema({ counter: Number });
const Test = db.model('Test', schema);

const doc = await Test.create({ counter: 0 });
doc.$inc('counter', 2);
await doc.save(); // Sends a `{ $inc: { counter: 2 } }` to MongoDB
doc.counter; // 2

doc.counter += 2;
await doc.save(); // Sends a `{ $set: { counter: 2 } }` to MongoDB

Document.prototype.$init()

.init のエイリアス


Document.prototype.$isDefault()

パラメータ
  • [path] «String»
戻り値
  • «Boolean»

パスがデフォルトに設定されているかどうかをチェックします。

MyModel = mongoose.model('test', { name: { type: String, default: 'Val '} });
const m = new MyModel();
m.$isDefault('name'); // true

Document.prototype.$isDeleted()

パラメータ
  • [val] «Boolean» オプション。mongooseがドキュメントが削除されたと考えるかどうかを上書きします

戻り値
  • «Boolean,Document» mongooseがこのドキュメントを削除されたと考えるかどうか。

ゲッター/セッター。ドキュメントが削除されたかどうかを判断します。

const product = await product.remove();
product.$isDeleted(); // true
product.remove(); // no-op, doesn't send anything to the db

product.$isDeleted(false);
product.$isDeleted(); // false
product.remove(); // will execute a remove against the db

Document.prototype.$isEmpty()

パラメータ
  • [path] «String»
戻り値
  • «Boolean»

指定されたパスが nullish であるか、空のオブジェクトのみを含んでいる場合は true を返します。このサブドキュメントが minimize オプション によって削除されるかどうかを判断するのに役立ちます。

const schema = new Schema({ nested: { foo: String } });
const Model = mongoose.model('Test', schema);
const doc = new Model({});
doc.$isEmpty('nested'); // true
doc.nested.$isEmpty(); // true

doc.nested.foo = 'bar';
doc.$isEmpty('nested'); // false
doc.nested.$isEmpty(); // false

Document.prototype.$isModified()

.isModified のエイリアス


Document.prototype.$isNew

タイプ
  • «property»

ドキュメントが新しいかどうかを指定するブール値フラグ。new を使用してドキュメントを作成した場合、このドキュメントは「新しい」と見なされます。$isNew は、Mongoose が save()insertOne() を使用して新しいドキュメントを作成するか、updateOne() を使用して既存のドキュメントを更新するかを判断する方法です。

const user = new User({ name: 'John Smith' });
user.$isNew; // true

await user.save(); // Sends an `insertOne` to MongoDB

一方、findOne() または別の クエリ操作 を使用してデータベースから既存のドキュメントをロードした場合、$isNew は false になります。

const user = await User.findOne({ name: 'John Smith' });
user.$isNew; // false

Mongoose は、save() が成功するとすぐに $isNewfalse に設定します。つまり、Mongoose は post('save') フックが実行される $isNew を false に設定します。post('save') フックでは、save() が成功した場合、$isNewfalse になります。

userSchema.post('save', function() {
  this.$isNew; // false
});
await User.create({ name: 'John Smith' });

サブドキュメントの場合、$isNew は、親に $isNew が設定されているか、新しいサブドキュメントを作成した場合に true になります。

// Assume `Group` has a document array `users`
const group = await Group.findOne();
group.users[0].$isNew; // false

group.users.push({ name: 'John Smith' });
group.users[1].$isNew; // true

Document.prototype.$locals

タイプ
  • «property»

ドキュメントにプロパティを格納するために使用できる空のオブジェクト。これは、Mongoose の内部処理と競合することなく、ミドルウェアにデータを渡すのに便利です。

schema.pre('save', function() {
  // Mongoose will set `isNew` to `false` if `save()` succeeds
  this.$locals.wasNew = this.isNew;
});

schema.post('save', function() {
  // Prints true if `isNew` was set before `save()`
  console.log(this.$locals.wasNew);
});

Document.prototype.$markValid()

パラメータ
  • path «String» 有効としてマークするフィールド

パスを有効としてマークし、既存のバリデーションエラーを削除します。


Document.prototype.$op

タイプ
  • «property»

Mongoose がこのドキュメントで実行している現在の操作を含む文字列。null'save''validate'、または 'remove' の場合があります。

const doc = new Model({ name: 'test' });
doc.$op; // null

const promise = doc.save();
doc.$op; // 'save'

await promise;
doc.$op; // null

Document.prototype.$parent()

戻り値
  • «Document»

parent() のエイリアス。このドキュメントがサブドキュメントまたはポピュレートされたドキュメントである場合は、ドキュメントの親を返します。それ以外の場合は undefined を返します。


Document.prototype.$populated()

.populated のエイリアス。


Document.prototype.$restoreModifiedPathsSnapshot()

パラメータ
  • snapshot «ModifiedPathsSnapshot» 復元するドキュメントの内部変更追跡状態のスナップショット

戻り値
  • «Document» this

このドキュメントの変更追跡状態を指定されたスナップショットに復元します。$restoreModifiedPathsSnapshot() は、ドキュメントのプロパティを変更するのではなく、変更追跡状態をリセットするだけであることに注意してください。

このメソッドは、トランザクションを中止するときに変更追跡を復元する必要がある カスタムトランザクションラッパー を記述する場合に特に役立ちます。

const doc = await TestModel.findOne();
const snapshot = doc.$createModifiedPathsSnapshot();

doc.name = 'test';
doc.$restoreModifiedPathsSnapshot(snapshot);
doc.$isModified('name'); // false because `name` was not modified when snapshot was taken
doc.name; // 'test', `$restoreModifiedPathsSnapshot()` does **not** modify the document's data, only change tracking

Document.prototype.$session()

パラメータ
  • [session] «ClientSession» 現在のセッションを上書きします

戻り値
  • «ClientSession»

このドキュメントに関連付けられたセッションの周りのゲッター/セッター。関連付けられたセッションを持つクエリから取得したドキュメントを save() する場合に、session を自動的に設定するために使用されます。

const session = MyModel.startSession();
const doc = await MyModel.findOne().session(session);
doc.$session() === session; // true
doc.$session(null);
doc.$session() === null; // true

これがトップレベルのドキュメントである場合、セッションを設定すると、すべての子ドキュメントに伝播されます。


Document.prototype.$set()

パラメータ
  • path «String|Object» 設定するパスまたはキー/値のオブジェクト

  • val «Any» 設定する値

  • [type] «Schema|String|Number|Buffer|[object Object]» 「オンザフライ」属性のタイプをオプションで指定します

  • [options] «Object» 設定の動作を変更するオプションを指定します

    • [options.merge=false] «Boolean» true の場合、ネストされたパス を設定すると、オブジェクト全体を上書きするのではなく、既存の値がマージされます。したがって、doc.set('nested', { a: 1, b: 2 })doc.set('nested.a', 1); doc.set('nested.b', 2); になります。

戻り値
  • «Document» this

競合を避けるために内部で使用される set() のエイリアス


Document.prototype.$timestamps()

パラメータ
  • [value] «Boolean» 現在のセッションを上書きします

戻り値
  • «Document,boolean,undefined,void» ゲッターとして使用する場合 (引数なし)、タイムスタンプオプションの状態を示すブール値が返されるか、設定されていない場合は "undefined" が使用されます。それ以外の場合は "this" が返されます

save() および bulkSave() を使用するときに、このドキュメントがデフォルトでタイムスタンプを適用するかどうかに関するゲッター/セッター。

const TestModel = mongoose.model('Test', new Schema({ name: String }, { timestamps: true }));
const doc = new TestModel({ name: 'John Smith' });

doc.$timestamps(); // true

doc.$timestamps(false);
await doc.save(); // Does **not** apply timestamps

Document.prototype.$validate()

.validate のエイリアス


Document.prototype.$where

タイプ
  • «property»

Mongoose がこのドキュメントを保存し、isNew が false の場合に、追加のクエリフィルターを追加するには、このプロパティを設定します。

// Make sure `save()` never updates a soft deleted document.
schema.pre('save', function() {
  this.$where = { isDeleted: false };
});

Document.prototype.depopulate()

パラメータ
  • [path] «String|Array[String]» ポピュレートを解除する特定のパス。設定されていない場合は、ドキュメントのすべてのパスのポピュレートを解除します。または、複数のスペースで区切られたパス。

戻り値
  • «Document» this
参照

ポピュレートされたフィールドを取り、ポピュレートされていない状態に戻します。

Model.findOne().populate('author').exec(function (err, doc) {
  console.log(doc.author.name); // Dr.Seuss
  console.log(doc.depopulate('author'));
  console.log(doc.author); // '5144cf8050f071d979c118a7'
})

パスが指定されていない場合は、すべてのポピュレートされたフィールドがポピュレートされていない状態に戻ります。


Document.prototype.directModifiedPaths()

戻り値
  • «Array[String]»

直接変更されたパスのリストを返します。直接変更されたパスとは、doc.foo = 'bar'Object.assign(doc, { foo: 'bar' })、または doc.set('foo', 'bar') を介して明示的に設定したパスです。

パス a は、modifiedPaths() に含まれているが、directModifiedPaths() に含まれていない可能性があります。これは、a の子が直接変更されたためです。

const schema = new Schema({ foo: String, nested: { bar: String } });
const Model = mongoose.model('Test', schema);
await Model.create({ foo: 'original', nested: { bar: 'original' } });

const doc = await Model.findOne();
doc.nested.bar = 'modified';
doc.directModifiedPaths(); // ['nested.bar']
doc.modifiedPaths(); // ['nested', 'nested.bar']

Document.prototype.equals()

パラメータ
  • [doc] «Document» 比較するドキュメント。偽の場合、常に "false" を返します。

戻り値
  • «Boolean»

このドキュメントが別のドキュメントと等しい場合は true を返します。

ドキュメントは、一致する _id がある場合に等しいと見なされます。ただし、どちらのドキュメントにも _id がない場合は、この関数は deepEqual() を使用してフォールバックします。


Document.prototype.errors

タイプ
  • «property»

現在のバリデーションエラーを含むハッシュ。


Document.prototype.get()

パラメータ
  • path «String»
  • [type] «Schema|String|Number|Buffer|[object Object]» オプションでオンザフライ属性のタイプを指定します

  • [options] «Object»
    • [options.virtuals=false] «Boolean» このパスを取得する前にバーチャルを適用します

    • [options.getters=true] «Boolean» false の場合、ゲッターの適用をスキップして、生の値をそのまま取得します

戻り値
  • «Any»

パスの値を返します。

// path
doc.get('age') // 47

// dynamic casting to a string
doc.get('age', String) // "47"

Document.prototype.getChanges()

戻り値
  • «Object»

MongoDB に送信される形式で、ドキュメントに発生した変更を返します。

const userSchema = new Schema({
  name: String,
  age: Number,
  country: String
});
const User = mongoose.model('User', userSchema);
const user = await User.create({
  name: 'Hafez',
  age: 25,
  country: 'Egypt'
});

// returns an empty object, no changes happened yet
user.getChanges(); // { }

user.country = undefined;
user.age = 26;

user.getChanges(); // { $set: { age: 26 }, { $unset: { country: 1 } } }

await user.save();

user.getChanges(); // { }

getChanges() が返すオブジェクトを変更しても、ドキュメントの変更追跡状態には影響しません。delete user.getChanges().$set を実行した場合でも、Mongoose は $set をサーバーに送信します。


Document.prototype.id

タイプ
  • «property»
参照

このドキュメントの _id の文字列バージョン。

注意

このゲッターは、デフォルトですべてのドキュメントに存在します。ゲッターは、構築時にSchemaidオプションをfalseに設定することで無効にできます。

new Schema({ name: String }, { id: false });

Document.prototype.init()

パラメータ
  • doc «Object» mongoによって返されるドキュメント

  • [opts] «Object»
  • [fn] «Function»

セッターや変更のマークをせずにドキュメントを初期化します。

ドキュメントがmongodbから返された後、内部的に呼び出されます。通常、この関数を自分で呼び出す必要はありません

この関数は、init ミドルウェアをトリガーします。initフックは同期であることに注意してください。


Document.prototype.inspect()

戻り値
  • «String»

console.logのヘルパー


Document.prototype.invalidate()

パラメータ
  • path «String» 無効にするフィールド。配列要素の場合は、array.i.fieldの構文を使用します。ここでiは配列の0から始まるインデックスです。

  • err «String|Error» pathが無効である理由を示すエラー

  • val «Object|String|Number|any» オプションの無効な値

  • [kind] «String» エラーのオプションのkindプロパティ

戻り値
  • «ValidationError» 現在無効になっているすべてのパスを含む、現在のValidationError

パスを無効としてマークし、検証を失敗させます。

errorMsg引数は、ValidationErrorのメッセージになります。

value引数(渡された場合)は、ValidationError.valueプロパティから利用可能になります。

doc.invalidate('size', 'must be less than 20', 14);

doc.validate(function (err) {
  console.log(err)
  // prints
  { message: 'Validation failed',
    name: 'ValidationError',
    errors:
     { size:
        { message: 'must be less than 20',
          name: 'ValidatorError',
          path: 'size',
          type: 'user defined',
          value: 14 } } }
})

Document.prototype.isDirectModified()

パラメータ
  • [path] «String|Array[String]»
戻り値
  • «Boolean»

pathが直接設定および変更された場合はtrue、それ以外の場合はfalseを返します。

doc.set('documents.0.title', 'changed');
doc.isDirectModified('documents.0.title') // true
doc.isDirectModified('documents') // false

Document.prototype.isDirectSelected()

パラメータ
  • path «String»
戻り値
  • «Boolean»

pathが明示的に選択されたかどうかを確認します。射影がない場合は、常にtrueを返します。

Thing.findOne().select('nested.name').exec(function (err, doc) {
   doc.isDirectSelected('nested.name') // true
   doc.isDirectSelected('nested.otherName') // false
   doc.isDirectSelected('nested')  // false
})

Document.prototype.isInit()

パラメータ
  • [path] «String»
戻り値
  • «Boolean»

pathinit状態にあるかどうか、つまりDocument#init()によって設定され、それ以降変更されていないかどうかを確認します。


Document.prototype.isModified()

パラメータ
  • [path] «String» オプション

  • [options] «Object»
    • [options.ignoreAtomics=false] «Boolean» trueの場合、push()などのアトミック操作で変更された配列の下にあるパスの場合、trueを返しません

戻り値
  • «Boolean»

指定されたパスのいずれかが変更された場合はtrue、それ以外の場合はfalseを返します。引数がない場合は、このドキュメント内のいずれかのパスが変更された場合にtrueを返します。

pathが指定されている場合は、pathをパスチェーンの一部として含むパスまたは完全なパスが変更されているかどうかを確認します。

doc.set('documents.0.title', 'changed');
doc.isModified()                      // true
doc.isModified('documents')           // true
doc.isModified('documents.0.title')   // true
doc.isModified('documents otherProp') // true
doc.isDirectModified('documents')     // false

Document.prototype.isNew

タイプ
  • «property»
参照

$isNewのレガシーエイリアス。


Document.prototype.isSelected()

パラメータ
  • path «String|Array[String]»
戻り値
  • «Boolean»

このドキュメントを初期化したソースクエリでpathが選択されたかどうかを確認します。

const doc = await Thing.findOne().select('name');
doc.isSelected('name') // true
doc.isSelected('age')  // false

Document.prototype.markModified()

パラメータ
  • path «String» 変更をマークするパス

  • [scope] «Document» バリデーターを実行するスコープ

パスを、dbに書き込む保留中の変更があるとしてマークします。

Mixed型を使用する場合に非常に役立ちます。

doc.mixed.type = 'changed';
doc.markModified('mixed.type');
doc.save() // changes to mixed.type are now persisted

Document.prototype.modifiedPaths()

パラメータ
  • [options] «Object»
    • [options.includeChildren=false] «Boolean» trueの場合、変更されたパスの子も返します。たとえば、falseの場合、doc.colors = { primary: 'blue' };の変更されたパスのリストにはcolors.primaryは含まれません。 trueの場合、modifiedPaths()colors.primaryを含む配列を返します。

戻り値
  • «Array[String]»

変更されたパスのリストを返します。


Document.prototype.overwrite()

パラメータ
  • obj «Object» このドキュメントを上書きするオブジェクト

戻り値
  • «Document» this

不変のプロパティを除き、このドキュメントのすべての値をobjの値で上書きします。set()と同様に動作しますが、objにないすべてのプロパティを未設定にする点が異なります。


Document.prototype.parent()

戻り値
  • «Document»

このドキュメントがサブドキュメントまたはポピュレートされたドキュメントの場合、ドキュメントの親を返します。親がない場合は、元のドキュメントを返します。


Document.prototype.populate()

パラメータ
  • path «String|Object|Array» ポピュレートするパス、すべてのパラメーターを指定するオブジェクト、またはそれらの配列のいずれか

  • [select] «Object|String» ポピュレーションクエリのフィールド選択

  • [model] «Model» ポピュレーションに使用するモデル。指定しない場合、populateはSchemaのrefフィールドの名前でモデルを検索します。

  • [match] «Object» ポピュレーションクエリの条件

  • [options] «Object» ポピュレーションクエリのオプション(ソートなど)

    • [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.transform=null] «Function» Mongooseがポピュレートされたすべてのドキュメントで呼び出し、ポピュレートされたドキュメントを変換できるようにする関数。

    • [options.options=null] «Object» limitleanなどの追加オプション。

  • [callback] «Function» コールバック

戻り値
  • «Promise,null» callbackが指定されていない場合はPromiseを返します。
参照

既存のドキュメントのパスをポピュレートします。

// Given a document, `populate()` lets you pull in referenced docs
await doc.populate([
  'stories',
  { path: 'fans', sort: { name: -1 } }
]);
doc.populated('stories'); // Array of ObjectIds
doc.stories[0].title; // 'Casino Royale'
doc.populated('fans'); // Array of ObjectIds

// If the referenced doc has been deleted, `populate()` will
// remove that entry from the array.
await Story.delete({ title: 'Casino Royale' });
await doc.populate('stories'); // Empty array

// You can also pass additional query options to `populate()`,
// like projections:
await doc.populate('fans', '-email');
doc.fans[0].email // undefined because of 2nd param `select`

Document.prototype.populated()

パラメータ
  • path «String»
  • [val] «Any»
  • [options] «Object»
戻り値
  • «Array,ObjectId,Number,Buffer,String,undefined,void»

指定されたpathのポピュレーション中に使用される_idを取得します。

const doc = await Model.findOne().populate('author');

console.log(doc.author.name); // Dr.Seuss
console.log(doc.populated('author')); // '5144cf8050f071d979c118a7'

パスがポピュレートされていない場合は、undefinedを返します。


Document.prototype.replaceOne()

パラメータ
  • doc «Object»
  • [options] «Object»
  • [callback] «Function»
戻り値
  • «Query»
参照

このドキュメントの_idをクエリセレクターとして使用してreplaceOneコマンドを送信します。

有効なオプション


Document.prototype.save()

パラメータ
戻り値
  • «Promise,undefined,void» コールバック付きで使用した場合はundefinedを返し、それ以外の場合はPromiseを返します。
参照

document.isNewtrueの場合、データベースに新しいドキュメントを挿入してこのドキュメントを保存するか、updateOne操作を変更のみを使用してデータベースに送信します。後者の場合、ドキュメント全体を置き換えません。

product.sold = Date.now();
product = await product.save();

保存が成功した場合、返されたPromiseは保存されたドキュメントで解決されます。

const newProduct = await product.save();
newProduct === product; // true

Document.prototype.schema

タイプ
  • «property»

ドキュメントのスキーマ。


Document.prototype.set()

パラメータ
  • path «String|Object» 設定するパスまたはキー/値のオブジェクト

  • val «Any» 設定する値

  • [type] «Schema|String|Number|Buffer|[object Object]» 「オンザフライ」属性のタイプをオプションで指定します

  • [options] «Object» 設定の動作を変更するオプションを指定します

戻り値
  • «Document» this

パスまたは複数のパスの値を設定します。.$setのエイリアス。

// path, value
doc.set(path, value)

// object
doc.set({
    path  : value
  , path2 : {
       path  : value
    }
})

// on-the-fly cast to number
doc.set(path, value, Number)

// on-the-fly cast to string
doc.set(path, value, String)

// changing strict mode behavior
doc.set(path, value, { strict: false });

Document.prototype.toJSON()

パラメータ
  • options «Object»
    • [options.flattenMaps=true] «Boolean» trueの場合、MapをPOJOに変換します。結果をJSON.stringify()する場合に便利です。

    • [options.flattenObjectIds=false] «Boolean» trueの場合、結果のObjectIdを24文字の16進文字列に変換します。

戻り値
  • «Object»
参照

このメソッドの戻り値は、JSON.stringify(doc)の呼び出しで使用されます。

このメソッドは、Document#toObjectと同じオプションを受け入れます。スキーマのすべてのドキュメントにデフォルトでオプションを適用するには、スキーマtoJSONオプションを同じ引数に設定します。

schema.set('toJSON', { virtuals: true });

toJSON()toObject()のオプションには1つの違いがあります。toJSON()を呼び出すと、flattenMapsオプションがデフォルトでtrueになります。これは、JSON.stringify()がデフォルトでMapをオブジェクトに変換しないためです。toObject()を呼び出すと、flattenMapsオプションはデフォルトでfalseになります。

toJSONオプションのデフォルト設定の詳細については、スキーマオプションを参照してください。


Document.prototype.toObject()

パラメータ
  • [options] «Object»
    • [options.getters=false] «Boolean» trueの場合、バーチャルを含め、すべてのゲッターを適用します

    • [options.virtuals=false] «Boolean|Object» trueの場合、エイリアスを含め、バーチャルを適用します。ゲッターのみを適用し、バーチャルを適用しない場合は、{ getters: true, virtuals: false }を使用します。{ pathsToSkip: ['someVirtual'] }形式のオブジェクトを使用して、特定のバーチャルを省略することもできます。

    • [options.aliases=true] «Boolean» options.virtuals = trueの場合、options.aliases = falseを設定して、エイリアスの適用をスキップできます。このオプションは、options.virtuals = falseの場合、no-opです。

    • [options.minimize=true] «Boolean» trueの場合、空のオブジェクトを出力から省略します

    • [options.transform=null] «Function|null» 設定されている場合、mongooseはこの関数を呼び出して、返されたオブジェクトを変換できるようにします

    • [options.depopulate=false] «Boolean» trueの場合、従来の方法でポピュレートされたパスをすべて、出力内の元のidで置き換えます。バーチャルポピュレートされたパスには影響しません。

    • [options.versionKey=true] «Boolean» false の場合、バージョンキー(デフォルトでは __v)を出力から除外します。

    • [options.flattenMaps=false] «Boolean» true の場合、Map を POJO に変換します。toObject() の結果を JSON.stringify() したい場合に便利です。

    • [options.flattenObjectIds=false] «Boolean» trueの場合、結果のObjectIdを24文字の16進文字列に変換します。

    • [options.useProjection=false] «Boolean»
      • true の場合、このドキュメントのプロジェクションで除外されているフィールドを省略します。プロジェクションを指定していない場合、スキーマで select: false が設定されているフィールドを省略します。
戻り値
  • «Object» JavaScript オブジェクト(POJO ではない)
参照

このドキュメントをプレーンな JavaScript オブジェクト(POJO)に変換します。

Buffer は、適切な保存のために mongodb.Binary のインスタンスに変換されます。

ゲッター/バーチャル

パスゲッターのみを適用する例

doc.toObject({ getters: true, virtuals: false })

バーチャルゲッターのみを適用する例

doc.toObject({ virtuals: true })

パスゲッターとバーチャルゲッターの両方を適用する例

doc.toObject({ getters: true })

これらのオプションをスキーマのすべてのドキュメントにデフォルトで適用するには、スキーマtoObject オプションに同じ引数を設定します。

schema.set('toObject', { virtuals: true })

変換

機密情報を削除したり、カスタムオブジェクトを返したりするなど、何らかの基準に基づいて結果のオブジェクトを変換する必要がある場合があります。この場合、オプションの transform 関数を設定します。

変換関数は 3 つの引数を受け取ります。

function (doc, ret, options) {}
  • doc 変換される Mongoose ドキュメント
  • ret 変換されたプレーンなオブジェクト表現
  • options 使用中のオプション(スキーマオプションまたはインラインで渡されたオプション)

// specify the transform schema option
if (!schema.options.toObject) schema.options.toObject = {};
schema.options.toObject.transform = function (doc, ret, options) {
  // remove the _id of every document before returning the result
  delete ret._id;
  return ret;
}

// without the transformation in the schema
doc.toObject(); // { _id: 'anId', name: 'Wreck-it Ralph' }

// with the transformation
doc.toObject(); // { name: 'Wreck-it Ralph' }

変換を使用すると、プロパティの削除だけでなく、完全に新しいカスタマイズされたオブジェクトを返すこともできます。

if (!schema.options.toObject) schema.options.toObject = {};
schema.options.toObject.transform = function (doc, ret, options) {
  return { movie: ret.name }
}

// without the transformation in the schema
doc.toObject(); // { _id: 'anId', name: 'Wreck-it Ralph' }

// with the transformation
doc.toObject(); // { movie: 'Wreck-it Ralph' }

注:変換関数が undefined を返した場合、戻り値は無視されます。

変換はインラインで適用することもでき、スキーマオプションで設定された変換をオーバーライドします。toObject オプションで指定された変換関数は、サブドキュメントにも伝播します。

function deleteId(doc, ret, options) {
  delete ret._id;
  return ret;
}

const schema = mongoose.Schema({ name: String, docArr: [{ name: String }] });
const TestModel = mongoose.model('Test', schema);

const doc = new TestModel({ name: 'test', docArr: [{ name: 'test' }] });

// pass the transform as an inline option. Deletes `_id` property
// from both the top-level document and the subdocument.
const obj = doc.toObject({ transform: deleteId });
obj._id; // undefined
obj.docArr[0]._id; // undefined

変換をスキップする場合は、transform: false を使用します。

schema.options.toObject.hide = '_id';
schema.options.toObject.transform = function (doc, ret, options) {
  if (options.hide) {
    options.hide.split(' ').forEach(function (prop) {
      delete ret[prop];
    });
  }
  return ret;
}

const doc = new Doc({ _id: 'anId', secret: 47, name: 'Wreck-it Ralph' });
doc.toObject();                                        // { secret: 47, name: 'Wreck-it Ralph' }
doc.toObject({ hide: 'secret _id', transform: false });// { _id: 'anId', secret: 47, name: 'Wreck-it Ralph' }
doc.toObject({ hide: 'secret _id', transform: true }); // { name: 'Wreck-it Ralph' }

toObject() オプションで変換を渡すと、Mongoose はトップレベルのドキュメントに加えて、サブドキュメントにも変換を適用します。同様に、transform: false はすべてのサブドキュメントの変換をスキップします。この動作は、スキーマで定義された変換とは異なります。schema.options.toObject.transform で変換を定義した場合、その変換はサブドキュメントには適用されません

const memberSchema = new Schema({ name: String, email: String });
const groupSchema = new Schema({ members: [memberSchema], name: String, email });
const Group = mongoose.model('Group', groupSchema);

const doc = new Group({
  name: 'Engineering',
  email: 'dev@mongoosejs.io',
  members: [{ name: 'Val', email: 'val@mongoosejs.io' }]
});

// Removes `email` from both top-level document **and** array elements
// { name: 'Engineering', members: [{ name: 'Val' }] }
doc.toObject({ transform: (doc, ret) => { delete ret.email; return ret; } });

変換は、これらのオプションと同様に、toJSON でも利用できます。toJSON()toObject() が別々の関数である理由については、この JSON.stringify() ガイドを参照してください。

詳細については、スキーマオプションを参照してください。

保存中、カスタムオプションはデータベースに送信される前のドキュメントには適用されません。


Document.prototype.toString()

戻り値
  • «String»

console.logのヘルパー


Document.prototype.unmarkModified()

パラメータ
  • path «String» 変更済みのマークを解除するパス

指定されたパスの変更済み状態をクリアします。

doc.foo = 'bar';
doc.unmarkModified('foo');
doc.save(); // changes to foo will not be persisted

Document.prototype.updateOne()

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

    • [options.lean] «Object» truthy の場合、Mongoose はドキュメントを Mongoose ドキュメントではなく、プレーンな JavaScript オブジェクトとして返します。Query.lean() および Mongoose の lean チュートリアルを参照してください。

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

  • [callback] «Function»
戻り値
  • «Query»
参照

このドキュメントの _id をクエリセレクターとして使用して、updateOne コマンドを送信します。

weirdCar.updateOne({$inc: {wheels:1}}, { w: 1 }, callback);

有効なオプション


Document.prototype.validate()

パラメータ
  • [pathsToValidate] «Array|String» 検証するパスのリスト。設定した場合、Mongoose は指定されたリストに含まれる変更されたパスのみを検証します。

  • [options] «Object» 内部オプション

    • [options.validateModifiedOnly=false] «Boolean» true の場合、Mongoose は変更されたパスのみを検証します。

    • [options.pathsToSkip] «Array|string» スキップするパスのリスト。設定した場合、Mongoose はこのリストに含まれていないすべての変更されたパスを検証します。

戻り値
  • «Promise» Promise を返します。

このドキュメントに登録された検証ルールを実行します。

注意

このメソッドは、保存の前に pre で呼び出され、検証ルールに違反した場合、save が中止され、エラーがスローされます。

await doc.validate({ validateModifiedOnly: false, pathsToSkip: ['name', 'email']});

Document.prototype.validateSync()

パラメータ
  • [pathsToValidate] «Array|string» 指定されたパスのみを検証します。

  • [options] «Object» 検証のオプション

    • [options.validateModifiedOnly=false] «Boolean» trueの場合、Mongooseは変更されたパスとrequiredパスではなく、変更されたパスのみを検証します。

    • [options.pathsToSkip] «Array|string» スキップするパスのリスト。設定した場合、Mongoose はこのリストに含まれていないすべての変更されたパスを検証します。

戻り値
  • «ValidationError,undefined,void» 検証中にエラーがある場合は ValidationError、エラーがない場合は undefined

このドキュメントに登録された検証ルール(非同期バリデーターをスキップ)を実行します。

注意

このメソッドは、同期検証が必要な場合に便利です。

const err = doc.validateSync();
if (err) {
  handleError(err);
} else {
  // validation passed
}