「scheme」という名前のフィールドに値がないか、明示的に「scheme」の値が「http」であるレコードの mongo コレクションをクエリしたいと思います。とても簡単に思えますが、この問題は一見したよりも複雑であることが証明されています。
db.collection.find({'scheme': None})
'scheme' が未定義 (インデックス フィールドなし) のすべてのレコードを返すため、最初は次のように動作すると想定しました。
db.collection.find({'scheme': {'$in': ['http', None]}})
ただし、これは「スキーム」が定義されていない値を除外しているように見えるため、スキームが「http」であるか、明示的に定義されているレコードを検索しているとしか思えませんNone
。これは少し直感に反するように思えますが、これで終わりです。私の2番目の試みは次のとおりです。
db.collection.find( {'$or': [{'scheme': {'$exists': False}}, {'scheme': 'http'}]})
これは、スキームが定義されていない結果も除外します。今回は、これが失敗する論理的な理由さえ思いつきません。
これが失敗する理由と、希望どおりに機能させる方法はありますか?
ありがとう
None
編集: Python ( pymongo) を介してこのクエリを実行していることに注意してくださいnull
。