142

MongoDBサーバーに対してPyMongoを使用して正規表現クエリを実行しようとしています。文書構成は以下のとおりです。

{
  "files": [
    "File 1",
    "File 2",
    "File 3",
    "File 4"
  ],
  "rootFolder": "/Location/Of/Files"
}

パターン*Fileに一致するすべてのファイルを取得したい。そのままやってみました

db.collectionName.find({'files':'/^File/'})

それでも私は何も返されません。MongoDBのドキュメントによると、これは可能であるはずなので、何かが足りませんか?Mongoコンソールでクエリを実行すると、正常に機能します。これは、APIがクエリをサポートしていないことを意味しますか、それとも誤って使用しているだけですか?

4

4 に答える 4

205

正規表現オプション(大文字と小文字を区別しないなど)を含める場合は、次のことを試してください。

import re
regx = re.compile("^foo", re.IGNORECASE)
db.users.find_one({"files": regx})
于 2011-02-02T17:26:55.997 に答える
163

正規表現の検索は、pymongoでは少し異なる方法で実行されますが、同じように簡単です。

正規表現は次のように実行されます。

db.collectionname.find({'files':{'$regex':'^File'}})

これは、Fileで始まるアイテムを含むfilesプロパティを持つすべてのドキュメントに一致します

于 2010-08-14T13:02:17.117 に答える
13

二重コンパイルを回避するために、PyMongoに付属のbsonregexラッパーを使用できます。

>>> regx = bson.regex.Regex('^foo')
>>> db.users.find_one({"files": regx})

Regexは文字列をコンパイルせずに保存するだけなので、find_oneは引数を「Regex」タイプとして検出し、適切なMongoクエリを形成できます。

この方法は、他のトップアンサーよりも少しPythonicだと思います。例:

>>> db.collectionname.find({'files':{'$regex':'^File'}})

いくつかの注意点があるため、正規表現クエリを使用する予定がある場合は、bson正規表現のドキュメントを読む価値があります。

于 2018-05-23T10:21:37.080 に答える
6

のソリューションはre、インデックスをまったく使用しません。次のようなコマンドを使用する必要があります。

db.collectionname.find({'files':{'$regex':'^File'}})

(返信の下にコメントすることはできないので、ここに返信します)

于 2018-08-16T07:44:41.190 に答える