Mongo Change Streams不返回集合的所有更新

时间:2018-03-05 20:48:19

标签: mongodb mongodb-oplog

我正在尝试使用Change Streams来查找/监控对mongo集合的更改。

db.collection.updateMany( {"contacts.firstName": "XXXXXX"}, { $set: {"LocationId" : 11111} } )

{ "acknowledged" : true, "matchedCount" : 77, "modifiedCount" : 77 }

使用updateMany一次更新多个文档时,我无法看到所有已更改的文档。但是,如果我一次更新一个,那么我会看到Stream中的每个更改。

{u'_id': ObjectId('580694d039811a468b96fc7b')}
{u'_id': ObjectId('58aeebed39811a468b974e97')}
{u'_id': ObjectId('59efe28b39811a468b97b9cc')}

结果:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX my: <http://www.semanticweb.org/ontologies/2010/5/Ontology1275975684120.owl#>

SELECT ?ind ?email 
WHERE { 
       ?ind rdf:type my:Student ;
            my:Email ?email .
     }

2 个答案:

答案 0 :(得分:0)

我想出了这个问题。需要遍历更改流游标以获取所有更新。

while True:
    cursor = db.collection.watch(full_document='updateLookup')
    while cursor:
        print next(cursor)['documentKey']

答案 1 :(得分:0)

我发现this article非常有用,他们确实提到了您的情况:

  

影响多个文档的操作(例如insertMany())为每个受影响的文档生成一个“更改”事件。例如,如果您调用带有2个文档的insertMany(),则将获得两个“更改”事件。通常,每个“更改”事件都描述对单个文档的更改。