如何使用pymongo过滤mongo集合中的数据

时间:2016-05-30 00:29:09

标签: python mongodb pymongo

我正在使用pymongo来查询MongoDB并检查特定集合中的重复项。我已经确定了重复项,但我想在脚本中再添加一个过滤器。请在下面找到我的脚本

from pymongo import MongoClient


client = MongoClient ('localhost')
db = client.test

data = db.devices.aggregate([
    {'$group': {'_id':{'UserId':"$userId",'DeviceType':"$deviceType"},
                'count':{"$sum":1}}}, 
    {'$match': {'count' : {"$gt" : 1}}}
])

for _id in data:
    print _id

从上面的脚本中,我想仅检查DeviceType =“email”的数据的重复项。我在比赛后尝试添加“和”条件,但是没有用。

请您告诉我如何实现这一目标?

由于

2 个答案:

答案 0 :(得分:2)

您可以通过在管道中添加$match阶段来过滤文档来有效地执行此操作,这样您就可以只对文档进行分组,其中deviceType =" email":

data = db.devices.aggregate([
    {'$match': {'deviceType': 'email'}},
    {'$group': {'_id': {'UserId': "$userId", 'DeviceType': "$deviceType"},
                'count': {"$sum": 1}}}, 
    {'$match': {'count': {"$gt": 1}}}
])

答案 1 :(得分:0)

我认为这是using $and with $match in mongodb的近似重复。

正如在那个问题中,我相信您的查询可能只是语法错误,您需要以下内容:

$match: {
    $and: [
        {'count': {"$gt": 1}},
        {'DeviceType': {"$eq": "email"}}
    ]
}

如果这没有用,那么请粘贴到目前为止所尝试的内容以及任何错误消息输出。