这是我的代码:
#! /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 } } )
感谢您的帮助。
答案 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')