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

すべてのドキュメントから配列のネストされたドキュメントのみを返す方法

    これは、.aggregate()を使用して行うことができます そして主に$unwind パイプラインオペレーター:

    最新のMongoDB3.4以降では、$replaceRootと組み合わせて使用​​できます。

    Model.aggregate([
      { "$unwind": "$books" },
      { "$replaceRoot": { "newRoot": "$books" } }
    ],function(err,results) {
    
    })
    

    以前のバージョンでは、すべてのフィールドを$projectで指定していました :

    Model.aggregate([
      { "$unwind": "$books" },
      { "$project": {
        "_id": "$books._id",
        "pages": "$books.pages",
        "title": "$books.title"
      }}
    ],function(err,results) {
    
    })
    

    したがって、$unwind 処理のために配列エントリを分解または「非正規化」するために使用するものです。事実上、これにより、アレイの各メンバーのドキュメント全体のコピーが作成されます。

    残りのタスクは、配列に存在するフィールドのみを返すことです。

    しかし、それはあまり賢明なことではありません。ドキュメントの配列内に埋め込まれたコンテンツのみを返すことを目的としている場合は、代わりにそのコンテンツを別のコレクションに配置することをお勧めします。

    配列からのみそれらのドキュメントを一覧表示するために、集約フレームワークを使用してコレクションからすべてのドキュメントを分離することで、パフォーマンスが大幅に向上します。



    1. MurmurHash-それは何ですか?

    2. サンプルのhbaseテーブルをすばやく作成する

    3. MongoDB:大きなファイルをインポートするとmongoimportが接続を失います

    4. 配列mongodb内のネストされた配列を更新しています