キーposition
を使用してuser_score
というコレクションを並べ替え、結果の最初のドキュメントを取得しようとしています。この場合、コレクションuser_score
は存在せず、結果をNone
として取得したいと思っていましたが、カーソルが戻ってきました。
1.結果=
db.user_score.find({'score':'$lt':score}}).sort("position,pymongo.DESCENDING").limit(1)
今、私は以下のようにクエリを変更しましたが、期待どおりに何も得られませんでした。
2.結果=
db.user_score.find_one({'score':{'$lt':score}}, sort=[("position", pymongo.DESCENDING)])
私の最初のクエリの問題は何ですか?
ありがとう
最初のクエリでは、並べ替え関数で1つの引数を渡します("position,pymongo.DESCENDING")
、2つの引数を渡す必要がある場合("position", pymongo.DESCENDING)
。
引用符を忘れないでください。
応答が少し遅れましたが、現在のバージョンのPyMongoはfind_one呼び出しで sort 操作をサポートしているようです。
ドキュメントページから ここ (find_oneのセクションをgrepしてください):
Find()のすべての引数は、find_one()の有効な引数でもありますが、limit引数は無視されます。単一のドキュメントを返します。一致するドキュメントが見つからない場合はNoneを返します。
使用例は次のとおりです。
filterdict = {'email' : '[email protected]'}
collection.find_one(filterdict, sort=[('lastseen', 1)])
これが最近の検索者に役立つことを願っています!
これは、findでのデフォルトのmongodbの動作です。 find
を使用するたびに、結果のリスト(この場合は反復可能なカーソル)が表示されます。クエリに一致するものがない場合は、findOne
-またはPyMongoと同等のfind_one
のみがNone
を返します。