2017-10-16 10 views
-3

ドキュメントオブジェクト配列内の要素です60以上のは以下のようなものとJSONオブジェクトの配列の長さグレードが変化しているスコアの合計を返す必要があります:スコアはJSONは私のMongoDBのコレクションを持っている

{ 
"address": { 
    "building": "1007", 
    "coord": [-73.856077, 40.848447], 
    "street": "Morris Park Ave", 
    "zipcode": "10462" 
}, 
"borough": "Bronx", 
"cuisine": "Bakery", 
"grades": [{ 
    "date": { 
     "$date": 1393804800000 
    }, 
    "grade": "A", 
    "score": 2 
}, { 
    "date": { 
     "$date": 1378857600000 
    }, 
    "grade": "A", 
    "score": 6 
}, { 
    "date": { 
     "$date": 1358985600000 
    }, 
    "grade": "A", 
    "score": 10 
}, { 
    "date": { 
     "$date": 1322006400000 
    }, 
    "grade": "A", 
    "score": 9 
}, { 
    "date": { 
     "$date": 1299715200000 
    }, 
    "grade": "B", 
    "score": 14 
}], 
"name": "Morris Park Bake Shop", 
"restaurant_id": "30075445" 
} 

{ 
"address": { 
    "building": "469", 
    "coord": [-73.961704, 40.662942], 
    "street": "Flatbush Avenue", 
    "zipcode": "11225" 
}, 
"borough": "Brooklyn", 
"cuisine": "Hamburgers", 
"grades": [{ 
    "date": { 
     "$date": 1419897600000 
    }, 
    "grade": "A", 
    "score": 8 
}, { 
    "date": { 
     "$date": 1404172800000 
    }, 
    "grade": "B", 
    "score": 23 
}, { 
    "date": { 
     "$date": 1367280000000 
    }, 
    "grade": "A", 
    "score": 12 
}, { 
    "date": { 
     "$date": 1336435200000 
    }, 
    "grade": "A", 
    "score": 12 
}], 
"name": "Wendy'S", 
"restaurant_id": "30112340" 
} 

タスクはここ60

+3

あなたが行ったことのコードを表示できますか? –

+1

達成しようとしていることに少しでも力を入れてください。あなたがどこかで立ち往生した場合、私たちはあなたを手伝ってくれるでしょう。誰もあなたのためにコードを書くことはありません。 – Shrabanee

+0

こんにちはShrabanee、私はしようと多くの解決策を見つけることに失敗しました。それは私がこのフォーラムで尋ねたことです。あなたがそれをするのを助けることができれば、それを残してください。あなたはアインシュタインだとは思わないでください。あなたは助けてくれると言った。私は明確に質問を説明した。コードを書かずに何か解決策を投稿する。 –

答えて

0

より大きいスコアの合計を持っているコレクションを返すためにMongoDBのクエリを記述することであるがこれを行う方法です。

db.collection.aggregate({ 
    $unwind: "$grades" // flatten the "grades" array 
}, { 
    $group: { 
     "_id": "$_id", 
     "sumOfScores": { // calculate the sum of all grades for all documents with the same "_id" 
      $sum: "$grades.score" 
     }, 
     "docs": { 
      $push: "$$ROOT" // remember all affected documents per group 
     } 
    } 
}, { 
    $match: { 
     "sumOfScores": { 
      $gt: 60 // filter out everything that we don't care about 
     } 
    } 
}, { 
    $unwind: "$docs" // flatten the "docs" array 
}, { 
    $group: { // restore the original document structure 
     "_id": "$docs._id", 
     "address": { $first: "$docs.address" }, 
     "borough": { $first: "$docs.borough" }, 
     "cuisine": { $first: "$docs.cuisine" }, 
     "grades": { 
      $push: "$docs.grades" 
     }, 
     "name": { $first: "$docs.name" }, 
     "restaurant_id": { $first: "$docs.restaurant_id" } 
    } 
}) 
関連する問題