21

「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

4

1 に答える 1

8

解決済み: これは私のバージョンの mongodb (1.4.4) の問題であるようです。この問題は 1.6.5 で解決されています。

于 2011-01-05T15:45:49.597 に答える