MongoDBコレクションのオブジェクト配列内のクエリされた要素のみを取得します

Sebtm

私のコレクションに次のドキュメントがあるとします。

{  
   "_id":ObjectId("562e7c594c12942f08fe4192"),
   "shapes":[  
      {  
         "shape":"square",
         "color":"blue"
      },
      {  
         "shape":"circle",
         "color":"red"
      }
   ]
},
{  
   "_id":ObjectId("562e7c594c12942f08fe4193"),
   "shapes":[  
      {  
         "shape":"square",
         "color":"black"
      },
      {  
         "shape":"circle",
         "color":"green"
      }
   ]
}

クエリを実行します。

db.test.find({"shapes.color": "red"}, {"shapes.color": 1})

または

db.test.find({shapes: {"$elemMatch": {color: "red"}}}, {"shapes.color": 1})

一致したドキュメント(ドキュメント1)を返しますが、常にすべての配列アイテムが含まれshapesます:

{ "shapes": 
  [
    {"shape": "square", "color": "blue"},
    {"shape": "circle", "color": "red"}
  ] 
}

ただし、以下を含む配列のみを使用してドキュメント(ドキュメント1)を取得したいと思いますcolor=red

{ "shapes": 
  [
    {"shape": "circle", "color": "red"}
  ] 
}

これどうやってするの?

JohnnyHK

MongoDB 2.2の新しい$elemMatch射影演算子は、最初に一致したshapes要素のみを含むように返されるドキュメントを変更する別の方法を提供ます。

db.test.find(
    {"shapes.color": "red"}, 
    {_id: 0, shapes: {$elemMatch: {color: "red"}}});

戻り値:

{"shapes" : [{"shape": "circle", "color": "red"}]}

2.2$ projection operatorでは、を使用してこれを行うこともできます。ここ$で、プロジェクションオブジェクトのフィールド名は、クエリからのフィールドの最初の一致する配列要素のインデックスを表します。以下は、上記と同じ結果を返します。

db.test.find({"shapes.color": "red"}, {_id: 0, 'shapes.$': 1});

MongoDB3.2アップデート

3.2リリース以降、新しい$filter集計演算子を使用して、射影中に配列をフィルタリングできます。これには、最初の一致だけでなく、すべての一致を含めるという利点があります。

db.test.aggregate([
    // Get just the docs that contain a shapes element where color is 'red'
    {$match: {'shapes.color': 'red'}},
    {$project: {
        shapes: {$filter: {
            input: '$shapes',
            as: 'shape',
            cond: {$eq: ['$$shape.color', 'red']}
        }},
        _id: 0
    }}
])

結果:

[ 
    {
        "shapes" : [ 
            {
                "shape" : "circle",
                "color" : "red"
            }
        ]
    }
]

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

MongoDB コレクションのオブジェクト配列でクエリされた要素を取得します

分類Dev

MongoDBコレクションのオブジェクト配列内の特定の要素を取得します

分類Dev

オブジェクト配列内のクエリされた要素のみを取得します

分類Dev

Javaを使用して、MongoDBのオブジェクト配列内のクエリされた要素のみを取得します

分類Dev

埋め込まれた配列を取得し、mongodbのオブジェクトのコレクションとして返します

分類Dev

オブジェクトのネストされた配列内のmongodbをクエリします

分類Dev

mongodbコレクションの埋め込み配列オブジェクトから特定のフィールドのみを取得します

分類Dev

MongoDBドキュメントコレクションのオブジェクト配列内の要素を検索します

分類Dev

Mongoose MongoDbNodeJSの配列内のコレクション内の接続されたオブジェクトを取得する方法

分類Dev

MongoDB:オブジェクトにネストされた別の配列にネストされた配列の最初の要素のみを返すようにプロジェクションを作成します

分類Dev

mongoDBでIDの配列を使用してコレクション内のオブジェクトを取得します

分類Dev

文字列のコレクションから結合されたオブジェクトのコレクションを作成するためのLINQクエリ

分類Dev

Mongoコレクションで、配列内の特定のオブジェクトをどのようにクエリしますか?

分類Dev

コレクションまたは配列内のオブジェクトのタイプを判別する

分類Dev

オブジェクトコレクション内の要素を取得する

分類Dev

Mongoコレクション内のオブジェクトの配列を検索します

分類Dev

div内の要素をクリックして、DOMにループされた配列内のオブジェクトから派生したその要素のテキストコンテンツを取得するにはどうすればよいですか?

分類Dev

postgresql9.4または9.5のjsonオブジェクトのネストされた配列内の要素をクエリします

分類Dev

ネストされたコレクション要素をPythonのオブジェクトとして返す

分類Dev

Hibernateはコレクション内の削除されたオブジェクトからエントリを削除しません

分類Dev

オブジェクトをホバリングまたはクリックして、クラス配列内のクラス要素の位置を取得します

分類Dev

Ruby on Rails:見つかったオブジェクトのリレーショナルオブジェクトの配列をサブクエリしますか?

分類Dev

mongoコレクションのネストされた配列要素から特定の値を取得します

分類Dev

コレクション内のオブジェクトの属性を手動で追加した配列に追加

分類Dev

MongoDB:「Id」がリストに存在するコレクション内のオブジェクトのみを更新します

分類Dev

各要素内のLaravelコレクションオブジェクトに新しい要素を追加します

分類Dev

オブジェクトをオブジェクトの配列(またはオブジェクトのコレクション)に変換する方法

分類Dev

MongoDBドキュメント内の特定のオブジェクトをクエリし、そのオブジェクトのみを取得します

分類Dev

ネストされたオブジェクト配列内の親オブジェクトのインデックスを取得します

Related 関連記事

  1. 1

    MongoDB コレクションのオブジェクト配列でクエリされた要素を取得します

  2. 2

    MongoDBコレクションのオブジェクト配列内の特定の要素を取得します

  3. 3

    オブジェクト配列内のクエリされた要素のみを取得します

  4. 4

    Javaを使用して、MongoDBのオブジェクト配列内のクエリされた要素のみを取得します

  5. 5

    埋め込まれた配列を取得し、mongodbのオブジェクトのコレクションとして返します

  6. 6

    オブジェクトのネストされた配列内のmongodbをクエリします

  7. 7

    mongodbコレクションの埋め込み配列オブジェクトから特定のフィールドのみを取得します

  8. 8

    MongoDBドキュメントコレクションのオブジェクト配列内の要素を検索します

  9. 9

    Mongoose MongoDbNodeJSの配列内のコレクション内の接続されたオブジェクトを取得する方法

  10. 10

    MongoDB:オブジェクトにネストされた別の配列にネストされた配列の最初の要素のみを返すようにプロジェクションを作成します

  11. 11

    mongoDBでIDの配列を使用してコレクション内のオブジェクトを取得します

  12. 12

    文字列のコレクションから結合されたオブジェクトのコレクションを作成するためのLINQクエリ

  13. 13

    Mongoコレクションで、配列内の特定のオブジェクトをどのようにクエリしますか?

  14. 14

    コレクションまたは配列内のオブジェクトのタイプを判別する

  15. 15

    オブジェクトコレクション内の要素を取得する

  16. 16

    Mongoコレクション内のオブジェクトの配列を検索します

  17. 17

    div内の要素をクリックして、DOMにループされた配列内のオブジェクトから派生したその要素のテキストコンテンツを取得するにはどうすればよいですか?

  18. 18

    postgresql9.4または9.5のjsonオブジェクトのネストされた配列内の要素をクエリします

  19. 19

    ネストされたコレクション要素をPythonのオブジェクトとして返す

  20. 20

    Hibernateはコレクション内の削除されたオブジェクトからエントリを削除しません

  21. 21

    オブジェクトをホバリングまたはクリックして、クラス配列内のクラス要素の位置を取得します

  22. 22

    Ruby on Rails:見つかったオブジェクトのリレーショナルオブジェクトの配列をサブクエリしますか?

  23. 23

    mongoコレクションのネストされた配列要素から特定の値を取得します

  24. 24

    コレクション内のオブジェクトの属性を手動で追加した配列に追加

  25. 25

    MongoDB:「Id」がリストに存在するコレクション内のオブジェクトのみを更新します

  26. 26

    各要素内のLaravelコレクションオブジェクトに新しい要素を追加します

  27. 27

    オブジェクトをオブジェクトの配列(またはオブジェクトのコレクション)に変換する方法

  28. 28

    MongoDBドキュメント内の特定のオブジェクトをクエリし、そのオブジェクトのみを取得します

  29. 29

    ネストされたオブジェクト配列内の親オブジェクトのインデックスを取得します

ホットタグ

アーカイブ