MongoDB watch()聚合按字段值匹配

时间:2020-07-24 04:40:08

标签: python mongodb pymongo

当我在集合上使用watch()函数时,我正在传递一个聚合来过滤通过的内容。我能够使operationType正常工作,但我也只想包含city字段等于Vancouver的文档。我正在使用的当前语法不起作用:

change_stream = client.mydb.mycollection.watch([
    {
        '$match': {
             'operationType': { '$in': ['replace', 'insert'] },
             'fullDocument': {'city': {'$eq': 'Vancouver'} }
         }
    }
])

作为参考,这就是我正在汇总的字典的样子:

{'_id': {'_data': '825F...E0004'},
 'clusterTime': Timestamp(1595565179, 2),
 'documentKey': {'_id': ObjectId('70fc7871...')},
 'fullDocument': {'_id': ObjectId('70fc7871...'),
                   'city': 'Vancouver',
 'ns': {'coll': 'notification', 'db': 'pipeline'},
 'operationType': 'replace'}

1 个答案:

答案 0 :(得分:1)

我发现我只需要使用一个点即可访问嵌套字典:

change_stream = client.mydb.mycollection.watch([
    {
        '$match': {
             'operationType': { '$in': ['replace', 'insert'] },
             'fullDocument.city': 'Vancouver' }
         }
    }
])