複数のフィールドを含むドキュメントの MongoDB コレクションがあります。列/フィールドの 1 つは数値のみである必要がありますが、これらのフィールドの一部には、数値以外の (破損した) データが文字列値として含まれています。破損した非数値データを除いて、この列の最大数値を見つける必要があります。質問Get the maximum value of a column in MongoDB を認識していますが、私の知る限り、この拡張ケースはカバーされていませんでした。
以下の例は、この問題を示しています。最高値の場合、次のドキュメント"age": 70
が返されます。
[
{
"id": "aa001",
"age": "90"
},
{
"id": "bb002",
"age": 70
},
{
"id": "cc003",
"age": 20,
}
]
find() / findOne() クエリの PHP の例を提供すると、非常に役立ちます。どうもありがとう!
JohnnyHK は完璧なソリューションを思いつきました。動作する PHP コードは次のとおりです。
$cursor = $collection->find(array('age' => array('$not' => array('$type' => 2))), array('age' => 1));
$cursor->sort(array('age' => -1))->limit(1);