我在 Mongo 集合中有以下文档-
{
key1: "someValue",
key2: "someValue2",
key3: "someValue3",
firstSeen: "2021-03-17",
lastSeen: "2021-03-17",
timesSeen: 1
}
仅当其中不存在具有 key1
、key2
和 key3
值的类似文档时,我才会将此文档添加到 Mongo。
如果确实存在类似的文档,我只想更新 timesSeen(加一)和 lastSeen(设置今天的日期)值。
这样做的正确和最有效的方法是什么?是否有一个我可以使用的命令,它可以在不搜索相关文档并插入新文档/更新存在之前根据该文档执行此操作
答案 0 :(得分:2)
您可以在更新时使用 upsert 和 $and 运算符来检查键是否存在,并使用 $eq 来比较值
db.collection.update({
$and: [
{
$and: [
{
key1: {
$exists: true
}
},
{
key1: {
$eq: "someValue"
}
}
]
},
{
$and: [
{
key2: {
$exists: true
}
},
{
key2: {
$eq: "someValue2"
}
}
]
},
{
$and: [
{
key3: {
$exists: true
}
},
{
key3: {
$eq: "someValue3"
}
}
]
},
]
},
{
$inc: {
timesSeen: 1
},
$set: {
key1: "someValue",
key2: "someValue2",
key3: "someValue3",
lastSeen: new Date()
}
},
{
upsert: true
})