2016-12-16 6 views
0

以下があります:リストの最初の要素だけを返す射影を使ってMongoDBからドキュメントを取得する必要があります。しかし、このリストは別のものの内部にあり、このリストはオブジェクト内にあり、ドキュメント内の別のオブジェクトの内側にあります。これは、次のようになります。「」は他の値を避けるために、投影を使用して:MongoDB:オブジェクトにネストされた別の配列にネストされた配列の最初の要素を返すように投影する

{ 
    "items": { 
    "item": [ 
     { 
     "items": { 
      "item": [ 
      { 
       "cell": [ 
       { 
        "value": "a" 
       }, 
       { 
        "value": "b" 
       }, 
       { 
        "value": "c" 
       } 
       ] 
      } 
      ] 
     } 
     } 
    ] 
    } 
} 

私の目標は、値でそれをフェッチすることです。それは私の突起部がこれを返す必要があり、次のとおりです。

{ 
    "items": { 
    "item": [ 
     { 
     "items": { 
      "item": [ 
      { 
       "cell": [ 
       { 
        "value": "a" 
       } 
       ] 
      } 
      ] 
     } 
     } 
    ] 
    } 
} 

問題は、私は「は既に私が知っているすべてを試みまし:私はちょうどこの最初の要素を返すために$ elemMatch、$および$スライスを使用しましたが、私はできる」ですドキュメントの複雑さのためにクエリを作成する必要はありません。私はMongoDB 3.2を使用しています。

詳細情報が必要な場合は、ここで更新します。とにかく、みんなありがとう!

答えて

1

以下のように試すことができます。構造を維持したまま$mapオペレータの使用がセルアレイに到達するようになり、第一の値を選択する$sliceを使用します。

aggregate({ 
    $project: { 
     items: { 
      item: { 
       $map: { 
        input: "$items.item", 
        as: "outer", 
        in: { 
         "items": { 
          item: { 
           $map: { 
            input: "$$outer.items.item", 
            as: "inner", 
            in: { 
             "cell": { 
              $slice: ["$$inner.cell", 1] 
             } 
            } 
           } 
          } 
         } 
        } 
       } 
      } 
     }, 
     _id: 0 
    } 
}) 
+0

正確に私が必要としていたもの。ありがとうございました! –

関連する問題