我正在尝试使用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 .
}
答案 0 :(得分:0)
我想出了这个问题。需要遍历更改流游标以获取所有更新。
while True:
cursor = db.collection.watch(full_document='updateLookup')
while cursor:
print next(cursor)['documentKey']
答案 1 :(得分:0)
我发现this article非常有用,他们确实提到了您的情况:
影响多个文档的操作(例如insertMany())为每个受影响的文档生成一个“更改”事件。例如,如果您调用带有2个文档的insertMany(),则将获得两个“更改”事件。通常,每个“更改”事件都描述对单个文档的更改。