我想找到與以下查詢匹配的物件,然后將 events 屬性設定為空陣列(如果匹配)。目前我使用的查詢只會更新每個檔案中的第一個嵌入物件,但我需要它來檢查每個檔案中的每個嵌入物件。這是查詢,有誰知道我怎樣才能做到這一點?
const date_check = moment().subtract(10, 'minutes').format('X')
await Accumulator.updateMany(
{ 'data.lastUpdate': { $lt: date_check } },
{
$set: {
'data.$.events': []
}
}
)
該檔案看起來像這樣...
{
bookmaker: 'Bet365',
sport: 'Football',
data: [
{
lastUpdate: '2372273273',
events: [
... // some event objects
]
},
{
lastUpdate: '2372234421',
events: [
... // some event objects
]
},
{
lastUpdate: '2375343461',
events: [
... // some event objects
]
}
]
}
uj5u.com熱心網友回復:
我認為最好更改您的架構,以便lastUpdate成為性能數字,并避免錯誤,請檢查$toInt,您可以使用類似于第二個查詢的代碼來完成。
詢問
- 陣列過濾器方式
- 用 date_check 替換“2372273273”
- 過濾以保留檔案
- 使用 arrayFilters 只更改通過過濾器的成員檔案
測驗代碼在這里
db.collection.update({
"data.lastUpdate": {
"$lt": "2372273273"
}
},
{
$set: {
"data.$[data].events": []
}
},
{
"arrayFilters": [
{
"data.lastUpdate": {
"$lt": "2372273273"
}
}
]
})
詢問
- 替代管道更新方式
$map - 將“2372273273”替換為
date_check - 過濾以查找檔案
- 僅更新過濾器為真的成員
管道更新需要 MongoDB >= 4.2
測驗代碼在這里
db.collection.update({
"data.lastUpdate": {
"$lt": "2372273273"
}
},
[
{
"$set": {
"data": {
"$map": {
"input": "$data",
"in": {
"$cond": [
{
"$lt": [
"$$this.lastUpdate",
"2372273273"
]
},
{
"$mergeObjects": [
"$$this",
{
"events": []
}
]
},
"$$this"
]
}
}
}
}
}
])
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/326158.html
上一篇:PyMongo不回傳聚合結果
