我有三個看起來像這樣的檔案:
_id: ObjectId('61e1312ad435c7124aa883a1')
name: "Brian"
languages: "English,Spanish,French"
_id: ObjectId('52e1312ad435c7124aa883a2')
name: "Max"
languages: "English"
_id: ObjectId('37e1312ad435c7124aa883a9')
name: "Mike"
languages: ""
如您所見,語言欄位可以是空的、有一個專案或多個專案,以逗號分隔。
如何將語言欄位轉換為物件陣列?最終結果應如下所示:
_id: ObjectId('61e1312ad435c7124aa883a1')
name: "Brian"
languages: [
{ name: "English", active: false }
{ name: "Spanish", active: false }
{ name: "French", active: false }
]
_id: ObjectId('52e1312ad435c7124aa883a2')
name: "Max"
languages: [
{ name: "English", active: false }
]
_id: ObjectId('37e1312ad435c7124aa883a9')
name: "Mike"
languages: []
語言欄位應該是一個包含兩個欄位的物件陣列,一個“名稱”欄位是語言的名稱,一個“活動”欄位始終設定為 false。
我已經設法將逗號分隔的字串轉換為字串陣列,但我不確定如何將它轉換為物件陣列。
db.collection.updateMany(
{},
[
{
"$set": {
"languages": {
$filter: {
input: {
$split: [
"$languages",
","
]
},
cond: {
$gt: [
{
$strLenCP: "$$this"
},
0
]
}
}
}
}
}
])
uj5u.com熱心網友回復:
您所缺少的只是最后$map一步:
db.collection.update({},
[
{
$set: {
languages: {
$filter: {
input: {$split: ["$languages", ","]},
cond: {$gt: [{$strLenCP: "$$this"}, 0]}
}
}
}
},
{
$set: {
languages: {
$map: {
input: "$languages",
as: "item",
in: {name: "$$item", active: false}
}
}
}
}
],
{multi: true})
看看它在操場上的例子是如何作業的
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/490684.html
