查询在MongoDB中的空值(Querying null value in MongoDB)

2019-07-20 12:50发布

使用pymongo我试图抓取集合在具有文件SmallUrl从不同null 。 我试图让names键和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}})

我想知道我在做什么错。

Answer 1:

您的查询不工作,因为你要查询的键中使用“Images.SmallUrl”,而不是“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" }

希望能帮助^ _ ^



Answer 2:

的pymongo版本null是Python None 。 因此, query应该是这样的:

query = {
    'Name': {'$regex': search_title, '$options': 'i'}, 
    'Images.SmallUrl': {'$ne': None}}


文章来源: Querying null value in MongoDB