Update query that handles duplicates and increment operator
Background:
alerts that runs each time a "flow" is received. blacklistedCommunication . What should happen:
When a new flow arrives, then the alerts doc is updated only if the flow's client_addr and server_addr are not already present in blacklistedCommuication . While at the same time, if we do find duplicates, it should only increment the flowCount .
The current query:
The below update query works to push new objects to blacklistedCommunication object if it's not present already. However, if it is indeed present, it will not update the flowCount
How can I incorporate this logic into the query? Do I need to write a separate update query in case of duplicates?
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
}
}
});
You can use $addToSet instead of $push . It will ensure unique {client:*,server:*} object within blacklistedCommunication and will always update flowCount :
alerts.update({
alertLevel: "orgLevelAlert",
alertCategory: "blacklistedServersViolationAlert",
alertState: "open"
}, {
$set: {
"misc.updatedTime": new Date()
},
$inc: {
flowCount: 1
},
$addToSet: {
blacklistedCommunication: {
client: flow.netflow.client_addr,
server: flow.netflow.server_addr
}
}
});
链接地址: http://www.djcxy.com/p/61960.html
上一篇: Python argparse可选的子
下一篇: 更新处理重复项和增加运算符的查询
