ich eine Reihe von Aktualisierungen der Form durchführen
update(
{ "uuid": someUuid, "revision.versionNumber": someVersionNumber},
{ "$set": { "meta.someId": someId }, "$push": { "meta.someMessages": someMessage } }
)
gelegentlich ich sehe, wenn dies für den gleichen uuid
, genannt versionNumber
, & someId
mit einem anderen someMessage
das erste Update erfolgreich sein wird, aber der zweite fehl schweigend.
Ich sehe die folgenden in den Mongo-Protokolle, so weiß ich die Updates in die Datenbank vornehmen, Hinweis, dass das erste Update die gleiche Abfrage wie die dritte hat aber das erste hat nupdated: 1
während der dritte nupdated: 0
Wed Aug 28 14:50:24 [conn18] update some-db.some_collection query: { uuid: "b841f303-a054-4eb9-8885-9d3ebf9906a1", revision.versionNumber: 9 } update: { $set: { meta.someId: "521e6fe4036420f90371a922" }, $push: { meta.someMessages: { event: "instance.complete", timestamp: new Date(1377726624985) } } } nscanned:2507 nmoved:1 nupdated:1 keyUpdates:0 numYields: 19 locks(micros) w:6010 9ms
Wed Aug 28 14:50:24 [conn18] run command some-db.$cmd { getlasterror: 1, fsync: true }
Wed Aug 28 14:50:24 [conn14] update some-db.some_collection query: { uuid: "843f424d-8a62-4a8b-853f-dc2e9c42b309", revision.versionNumber: { $lt: 10 }, meta.deleted: true } update: { $set: { meta.deleted: false } } nscanned:3243 nupdated:0 keyUpdates:0 numYields: 23 locks(micros) w:8431 11ms
Wed Aug 28 14:50:24 [conn14] run command some-db.$cmd { getlasterror: 1, fsync: true }
Wed Aug 28 14:50:24 [conn5] update some-db.some_collection query: { uuid: "b841f303-a054-4eb9-8885-9d3ebf9906a1", revision.versionNumber: 9 } update: { $set: { meta.someId: "521e6fe4036420f90371a922" }, $push: { meta.someMessages: { event: "instance.complete.success", timestamp: new Date(1377726624985) } } } nscanned:3242 nupdated:0 keyUpdates:0 numYields: 20 locks(micros) w:5684 9ms
auch hier ist die Ausgabe von mongosniff
update flags:0 q:{ uuid: "85700d8c-8946-4b09-968b-968f76d31028", revision.versionNumber: 13 } o:{ $set: { meta.someId: "521e7b12036420f90371b515" }, $push: { meta.someMessages: { event: "instance.complete", timestamp: new Date(1377729439093) } } }
319 some-db.some_collection
update flags:0 q:{ uuid: "a460019d-443b-4b59-b23e-1eae19e26c31", revision.versionNumber: 14 } o:{ $set: { meta.someId: "521e7b2f036420f90371b579" }, $push: { meta.someMessages: { event: "task.start", timestamp: new Date(1377729439093) } } }
123 some-db.some_collection
query: { uuid: "a2558f5c-d825-4ec4-bbc4-7e48b1cb3c60", isLatest: true } ntoreturn: -1 ntoskip: 0
302 some-db.some_collection
update flags:0 q:{ uuid: "85700d8c-8946-4b09-968b-968f76d31028", revision.versionNumber: 13 } o:{ $set: { meta.someId: "521e7b12036420f90371b515" }, $push: { meta.someMessages: { event: "instance.complete.success", timestamp: new Date(1377729439093) } } }
173 some-db.some_collection
Gibt es einen Index auf dem Feld UUID? –
@AsyaKamsky gibt es nicht. Würde das einen Unterschied machen und warum? –
Ich denke, es würde - bemerken, dass das Update, das "dort" zuerst wuchs das Dokument, das verursacht es auf der Festplatte verschoben wurde "nmoved: 1" was bedeutet, dass je nachdem, wie das andere Update die Sammlung gescannt wurde, ist es möglich, "verpasst "Das Dokument (beide Prozesse liefern regelmäßig, was bedeutet, dass sich der Zustand der Welt ändern könnte: numYields: 20) Der Index würde auch bei der Langsamkeit des Updates helfen - Sie scannen über 2500 Dokumente, um 1 zu finden, mit index den nscanned wird viel niedriger sein und beide Updates werden garantiert den Index in der gleichen Reihenfolge "durchlaufen". –