6

pymongoを使用して、とはSmallUrl異なるコレクション内のドキュメントを取得しようとしていますnullnamesキーとキーを取得しようとしていSmallUrlます。

唯一のものを探すとName、クエリは正常に実行されます。nullただし、の値を持つドキュメントを結果から除外したいのでSmallUrl、これをクエリに含めると、クエリは何も返しません。

これはMongoDBの構造です。

{u'Images': {u'LargeUrl': u'http://somelink.com/images/7960/53.jpg',
             u'SmallUrl': u'http://somelink.com/images/7960/41.jpg'}
 u'Name': u'Some Name',
 u'_id': ObjectId('512b90f157dd5920ee87049e')}

{u'Images': {u'LargeUrl': u'http://somelink.com/images/8001/53.jpg',
             u'SmallUrl': null}
 u'Name': u'Some Name Variation',
 u'_id': ObjectId('512b90f157dd5820ee87781e')}

これはクエリの関数です。

def search_title(search_title):
$ne
    ''' Returns a tuple with cursor (results) and the size of the cursor'''

    query = {'Name': {'$regex': search_title, '$options': 'i'}, 'SmallUrl': {'$exists': True}}

    projection = {'Name': 1, 'Images': 1}

    try:
        results = movies.find(query, projection)

    except:
        print "Unexpected error: ", sys.exc_info()[0]
$ne
    return results, results.count()

私はMongoDBを初めて使用し、すでにさまざまなクエリを試しました。$and、、}を使用$notしました。{'$ne': 'null'}mongoShellでもクエリを実行しましたが、同じ結果になりました。これは、私がシェルで照会したものの例です。

db.myCollection.find({'Name': {'$regex': 'luis', '$options': 'i'}, 'SmallUrl': {'$ne': null}})

何が間違っているのか知りたいのですが。

4

2 に答える 2

49

のpymongoバージョンnullはPythonですNone。したがってquery、次のようになります。

query = {
    'Name': {'$regex': search_title, '$options': 'i'}, 
    'Images.SmallUrl': {'$ne': None}}
于 2013-02-26T03:13:59.317 に答える
0

クエリのキーに「SmallUrl」ではなく「Images.SmallUrl」を使用する必要があるため、クエリは機能しません。私のテストコレクション:

> db.t.find()
{ "_id" : ObjectId("512cdbb365fa12a0db9d8c35"), "Images" : { "LargeUrl" : "http://aaa.com", "SmallUrl" : "http://bb.com" }, "Name" : "yy" }
{ "_id" : ObjectId("512cdc1765fa12a0db9d8c36"), "Images" : { "LargeUrl" : "http://aaa.com", "SmallUrl" : null }, "Name" : "yy" }

と私のテストクエリ:

> db.t.find({'Images.SmallUrl': {$ne: null}})
{ "_id" : ObjectId("512cdbb365fa12a0db9d8c35"), "Images" : { "LargeUrl" : "http://aaa.com", "SmallUrl" : "http://bb.com" }, "Name" : "yy" }

助けてください^_^

于 2013-02-26T16:04:59.417 に答える