2011-12-30 8 views
0

Pythonを好きではない人に申し訳ありません。私のサンプルはpymongoを使用しています。ワイルドカードをmongodb emptyはワイルドカードですが、トップレベルにのみありますか?

>>> projects.find_one({'name': 'boodo3', '_id': ObjectId('4efa14c6b0ab584326000000')}) 
{u'_id': ObjectId('4efa14c6b0ab584326000000'), u'name': u'boodo3', u'updated_at': u'2011-12-28 13:47:09'} 
>>> projects.find_one({'name': 'boodo3'}) 
{u'_id': ObjectId('4efa14c6b0ab584326000000'), u'name': u'boodo3', u'updated_at': u'2011-12-28 13:47:09'} 

が、私はクエリを実行していた場合、「内部」ドキュメントの:空のMongoDBでは

はここのように「ワイルドカード」(「ワイルドカード」を使用して、私は同じか、それ以上の結果を得る)として使用されていますそれ以上の次のサンプルのように動作しません:

>>> testruns.find_one({'_parent': {'_coll': u'projects', '_id': '4efa14c6b0ab584326000000'}}) 
{u'_parent': {u'_coll': u'projects', u'_id': u'4efa14c6b0ab584326000000'}, u'_id': ObjectId('4efa167eb0ab584351000002'), u'name': u'11121617', u'updated_at': u'2011-12-27 19:03:26'} 
>>> testruns.find_one({'_parent': {'_coll': u'projects'}}) 
>>> <no results here> 

私は「で$」と「$のニン」を使用してバリエーションを試してみましたが、今のところ運なし。私は、文書を照会する構造化された方法があることを願っています(私は正規表現以外に何かを意味します)。必要に応じてコレクションを再構築しますが、フラットドキュメントはここでの解決策ではないと私は信じています。

つまり、すべてのクエリをドット表記に変換する必要がありますか? 正規表現でmongodbのドキュメントを照会する方法はありますか?

免責事項:私はmongodbなどを批判するつもりはありません。これはmongodbを使用する私の最初のアプリであり、mongodbの文書を照会する方法を学びたい。

答えて

4

このクエリ: testruns.find_one({'_parent': {'_coll': u'projects'}}) は、ドキュメントが同様にそれで他のキーを持っているので、任意のマッチを持っていないので、等号が成立していないん_parentはに等しい文書を探している - 」という概念はありませんワイルドカード "となります。このようなクエリを試してみてください。

testruns.find_one({'_parent._coll': u'projects'})

+0

私は現在、あなたのサンプルのようにドット表記にクエリを変換していますし、それはこれまでのところ非常に有望に見えます。ドット表記を使用したクエリのパフォーマンスも良いことを願っています。 – mark

関連する問題