Hintergrund Duplikaten und Inkrementoperator Griffe:Aktualisierungsabfrage, die
- Ich habe eine Update-Abfrage auf Sammlung
alerts
, die jede Zeit läuft so genannte „Flow“ empfangen wird. - Ich habe ein Array von Objekten in meinem Alert-Dokument
blacklistedCommunication
.
Was passieren soll:
Wenn ein neuer Fluss kommt, dann wird der alerts
doc aktualisiert nur, wenn die Strömung des client_addr
und server_addr
sind nicht bereits in blacklistedCommuication
. Wenn wir gleichzeitig Duplikate finden, sollte es nur die flowCount
inkrementieren.
Die aktuelle Abfrage:
Die folgende Update-Abfrage funktioniert neue Objekte zu blacklistedCommunication
Objekt schieben, wenn es nicht bereits präsentieren. Wenn es jedoch tatsächlich vorhanden ist, wird es nicht aktualisiert flowCount
Wie kann ich diese Logik in die Abfrage integrieren? Muss ich im Falle von Duplikaten eine separate Update-Anfrage schreiben?
alerts.update({
alertLevel: "orgLevelAlert",
alertCategory: "blacklistedServersViolationAlert",
alertState: "open",
'blacklistedCommunication.client': {
$ne: flow.netflow.client_addr
},
// 'blacklistedCommunication.server': {
// $ne: flow.netflow.server_addr
// }
}, {
$set: {
"misc.updatedTime": new Date()
},
$inc: {
flowCount: 1
},
$push: {
blacklistedCommunication: {
client: flow.netflow.client_addr,
server: flow.netflow.server_addr
}
}
});
Dank. Ich habe mich nur gefragt. Dieses Update wird extrem häufig ausgeführt, sogar einige Male pro Sekunde. Wäre es in Ordnung, so viele Updates auf Mongo zu feuern? Oder sollte ich stattdessen die Eindeutigkeitsprüfung in js handhaben müssen? – blueren
Hmm, ich muss die ursprüngliche Frage falsch lesen, aber soweit ich das verstehe muss man flowCount in jedem Fall updaten. Könnten Sie das bitte bestätigen, da die Folgefrage in diesem Szenario keinen Sinn ergibt? –
Mein schlechtes. Was die Frage betrifft, funktioniert Ihre Antwort perfekt. Ignoriere meine Folgefrage. – blueren