2016-12-12 13 views
0

ここでは私が取り組んでいるコレクションデータです。配列の埋め込みドキュメントから最初のドキュメントを取得する - MongoDB

{ 
    "_id" : "1", 
    "embed_array" : [ 
     { 
      "id" : 14, 
      "data" : "XXX" 
     }, 
     { 
      "id" : 13, 
      "data" : "YYY" 
     }, 
     { 
      "id" : 12, 
      "data" : "ZZZ" 
     } 
    ] 
}, 
{ 
    "_id" : "2", 
    "embed_array" : [ 
     { 
      "id" : 14, 
      "data" : "XXX1" 
     }, 
     { 
      "id" : 13, 
      "data" : "YYY1" 
     }, 
     { 
      "id" : 12, 
      "data" : "ZZZ1" 
     } 
    ] 
}, 
{ 
    "_id" : "3", 
    "embed_array" : [ 
     { 
      "id" : 14, 
      "data" : "XXX2" 
     }, 
     { 
      "id" : 13, 
      "data" : "YYY2" 
     }, 
     { 
      "id" : 12, 
      "data" : "ZZZ2" 
     } 
    ] 
} 

これは私が得ようとしているものです。

{ 
    "id" : 14, 
    "data" : "XXX" 
} 

ここに検索条件があります。 "_id": "1"、 "embed_array":最初の配列ドキュメント。

$ sliceを試しましたが、うまく動作しませんでした。

ご協力いただければ幸いです。おかげ

答えて

0

は、あなたがこのようにそれを行うことができます。

db.collection.find({ 
    _id:"1" 
}, 
{ 
    _id:1, 
    embed_array:{ 
     $slice: 1 
    } 
}) 

を最初のステップは、{: "1" _id}に_idフィールドをフィルタリングすることです。次に、必要な情報だけを返すために投影法を使用します。ここでは、「embed_array」の最初の要素だけを必要とするため、$slice演算子を使用します。

{$スライス:1}に等しい{$スライス:[0,1]}を意味する:インデックス0及び1

間の配列の要素を取得することが

{ 
    "_id" : "1", 
    "embed_array" : [ 
    { "id" : 14, "data" : "XXX" } 
    ] 
} 
+0

を返すであろうそれは完璧に働いた。もっと詳しく説明できますか? – saburo

+0

@saburo私の編集を参照してください – felix

+0

ありがとう。私は考えを得た。 – saburo

関連する問題