带有pymongo和$ ne:null的SyntaxError

时间:2013-12-16 12:55:04

标签: python mongodb pymongo mongodb-query

这是我的代码:

#! /usr/bin/python

import os
from pymongo.connection import Connection
from pymongo.master_slave_connection import MasterSlaveConnection


database = 'toto'
collection = 'logs'

master = Connection(host="X.X.X.X", port=27017)
slave1 = Connection(host="X.X.X.X", port=27017)
con = MasterSlaveConnection(master, slaves=[slave1, master])

db = getattr(con,database)

#host_name.append("getattr(db,collection).distinct( 'host_name' )")
#print host_name[1]

hosts = db.logs.distinct( 'host_name' )

services = db.logs.distinct("service_description" , { "service_description" : { $ne : null } } )

#print hosts
print services

我收到了这个错误:

File "./rapport.py", line 23
    services = db.logs.distinct("service_description" , { "service_description" : { $ne : null } } )
                                                                                    ^
SyntaxError: invalid syntax

为什么我不能在代码中使用"$ne : null"?我不明白,因为当我直接在mongodb中执行此查询"db.logs.distinct("service_description" , { "service_description" : { $ne : null } } )"时,它可以正常工作。

我也尝试了这个,但它不起作用:

services = db.logs.distinct("service_description", { "service_description" : { "$ne" : None } } )

感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

您需要引用$ne并使用None而不是null。 Pymongo使用dicts作为参数。

asdf = "something"
{ asdf: "foo"} 

是一个有效的声明,使用"something"作为密钥。

如果将其与

进行比较
{$ne: "foo"}

解释器期望变量名称作为第一个条目,$ne无效。

此外,null未在Python中预定义,因此请改用None

结合pymongo中的流体界面,您的查询应该是:

db.logs.find({"service_description": {"$ne" : None}}).distinct('service_description')