sql >> データベース >  >> NoSQL >> MongoDB

マングース:_docはどうしたの?

    更新

    元の質問を誤解したかもしれませんが、質問の性質が変わったように見えるため、以下の情報は関係ありませんが、そのままにしておきます。 :)

    私はあなたのコードをテストしました、そしてそれは私にとってうまくいきます。スキーマの一部ではないプロパティ(または他のいくつかの特別なプロパティ)を設定すると、Mongooseは特別なコードを実行しません。 JavaScriptは現在、まだ存在していないプロパティのコードの呼び出しをサポートしていません(したがって、Mongooseはgooのセットの邪魔をすることができません たとえば、プロパティ)。

    したがって、プロパティを設定する場合:

    foo.goo = { c: 1 };
    

    マングースは関与していません。 console.logの場合 表示したコード以外のものでしたが、正しく報告されない可能性があります。

    さらに、sendするとき 結果はJSON、JSON.stringifyとして返されます toStringを呼び出すが呼び出されています マングースモデルで。その場合、Mongooseはスキーマで定義されたプロパティのみを使用します。したがって、デフォルトでは、追加のプロパティは返送されません。 dataの性質を変更しました ただし、配列はマングースデータを直接指すため、その問題を回避します。

    通常の動作の詳細

    プロパティgooを設定する場合 マングースを使用すると、かなりのことが起こります。 Mongooseは、Object.definePropertyを介してプロパティゲッター/セッターを作成します (一部の docs )。したがって、gooを設定すると [String]として定義したプロパティ 、いくつかのことが起こります:

    1. マングースコードは、値がオブジェクトインスタンスに設定される前に呼び出されます(単純なJavaScriptオブジェクトとは異なります)
    2. Mongooseは、データを格納するための配列(オプションで)を作成します(MongooseArray )これには配列データが含まれます。提供した例では、配列を渡さなかったため、配列が作成されます。
    3. Mongooseはデータを適切なタイプにキャストしようとします
    4. toStringを呼び出します キャストの一部として渡されたデータについて。

    したがって、結果として、ドキュメントにはtoStringを含む配列が含まれるようになります。 渡したオブジェクトのバージョン。

    gooの内容を確認した場合 プロパティを使用すると、[object Object]を含む文字列である単一の要素を持つ配列になっていることがわかります。 。より基本的なタイプを選択した場合、または宛先プロパティのストレージタイプと一致した場合は、基本的な同等性チェックが機能したことがわかります。



    1. Java用の最高のRedisライブラリ

    2. MongoDB:クライアント側でDBRefを解決する方法は?

    3. Nodejs + Mongo dbは、ユーザー名とパスワードを使用してサーバーデータベースに接続します

    4. Redisパブリッシュ/サブスクライブ