我的檔案結構如下:
// Document 1
{
_id : "910",
requests : {
100 : {
date : "10/06/2022 11:24:19"
isProcessed : false
},
123 : {
date : "10/06/2022 11:24:19"
isProcessed : false
},
}
}
// Document 2
{
_id : "743",
requests : {
999 : {
date : "10/06/2022 11:24:19"
isProcessed : false
},
152 : {
date : "10/06/2022 11:24:19"
isProcessed : false
},
}
}
請求保存為映射結構,每個檔案中的鍵不同。我想更改地圖isProcessed中true每個欄位的每個值requests,并為所有檔案執行此操作。我怎樣才能做到這一點?
uj5u.com熱心網友回復:
您的檔案/架構設計存在幾個問題。
- 使用動態值作為欄位名稱通常被認為是反模式
- 您將日期存盤為字串。考慮將它們存盤為適當的日期物件
不過,您可以使用$objectToArray將requests物件轉換為 kv 元組陣列。然后用于$mergeObjects執行isProcessed標志的更新。最后,使用$arrayToObject恢復到原始結構。
db.collection.update({},
[
{
"$addFields": {
"requests": {
"$objectToArray": "$requests"
}
}
},
{
"$addFields": {
"requests": {
"$map": {
"input": "$requests",
"as": "kv",
"in": {
k: "$$kv.k",
v: {
"$mergeObjects": [
"$$kv.v",
{
"isProcessed": true
}
]
}
}
}
}
}
},
{
"$addFields": {
"requests": {
"$arrayToObject": "$requests"
}
}
}
],
{
multi: true
})
這是Mongo游樂場供您參考,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/495727.html
上一篇:pymongo.errors.ServerSelectionTimeoutError:RepliceSetNoPrimary-MongoDBAtlas
下一篇:填充貓鼬模型未回傳預期結果
