2017-08-16 10 views
0

私はmongo dbを使い始めたばかりで、次のようなmongo dbコレクションのネストされた配列の数を得る方法を見つけようとしています。mongodbで入れ子になった配列を数えて更新する

{ 
     city_id: 'C1', 
     city_name: "C1Name", 
     wards: [{ 
     ward_id: "W1", 
     ward_number: "1", 
     areas: [{ 
     area_id: "a1", 
     area_name: "a1Name" 
    }, 
    { 
     area_id: "a2", 
     area_name: "a2Name" 
    }] 
    }, 
    { 
    ward_id: "W2", 
    ward_number: "2", 
    areas: [{ 
     area_id: "a21", 
     area_name: "a21Name" 
    }, { 
     area_id: "a22", 
     area_name: "a22Name" 
    }] 
    }] 
}, 
    { 
     city_id: 'C2', 
     city_name: "C2Name", 
     wards: [{ 
     ward_id: "W21", 
     ward_number: "21", 
     areas: [{ 
     area_id: "aw21", 
     area_name: "aw21Name" 
    },{ 
     area_id: "aw22", 
     area_name: "aw22Name" 
    }] 
    },{ 
     ward_id: "W132", 
     ward_number: "132", 
     areas: [{ 
     area_id: "a132", 
     area_name: "a132Name" 
    }, { 
     area_id: "a1332", 
     area_name: "a2112Name" 
    }] 
    }] 
} 

今ここで私がCITY_ID = C1とward_id = W1

city_detailsにおける領域の数が、私は「これは2としてカウント私を取得する必要がありますが、それはにISN

db.city_details.aggregate(
     {$match:{"city_id":"C1"}}, 
     {$project:{"wards":"$wards"}}, 
     {$unwind:"$wards"}, 
     {$project{"ward":"$wards.id","area":"$wards.areas"}}, 
     {$match:{ward:"W1"}}, 
     {$project:{$count:{"area"}} 
    ) 

として凝集を使用したいです働いている。

また、これらの領域の配列を更新するにはどうすればよいですか?

答えて

0

{$match:{ward:"W1"}}が前の結果内にW1を見つけることができないため、クエリが機能しないのは、 {$match:{ward:"W1"}}を実行する前に

結果は次のようになります。

{ 
    "area" : [ 
     { 
      "area_id" : "a1", 
      "area_name" : "a1Name" 
     }, 
     { 
      "area_id" : "a2", 
      "area_name" : "a2Name" 
     } 
    ] 
}, 
{ 
    "area" : [ 
     { 
      "area_id" : "a21", 
      "area_name" : "a21Name" 
     }, 
     { 
      "area_id" : "a22", 
      "area_name" : "a22Name" 
     } 
    ] 
} 

見つける一切W1はありません。あなたの2番目の質問にについて

db.city_details.aggregat([ 
    {$match: {"city_id": "C1"}}, 
    {$project: {"ward": {$filter: {"input": "$wards", "as": "ward", "cond": { $eq: ["$$ward.ward_id", "W1"]}}}}}, 
    {$unwind:"$ward"}, 
    {$project: {"size": {$size: "$ward.areas"}}} 
]) 

代わりに、このようなクエリを使用することができます。それは簡単ではありません、this postはmongodbのネストされた配列の更新についてもっと読んでくれます。

+0

こんにちは、ジュリアンさんは仕事をしましたが、$ eq演算子で2つの$記号を使用しているとは分かりません – TGW

+0

詳細については、[mongodb docu](https://docs.mongodb。 com/manual/reference/aggregation-variables /)を参照してください。しかし要するに、_ $$ _を使用すると、_ward_から現在の値にアクセスできます。 –

関連する問題