我有三份像这样的文件:
_id: ObjectId('61e1312ad435c7124aa883a1')
name: "Brian"
languages: "English,Spanish,French"
_id: ObjectId('52e1312ad435c7124aa883a2')
name: "Max"
languages: "English"
_id: ObjectId('37e1312ad435c7124aa883a9')
name: "Mike"
languages: ""如您所见,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: []语言字段应该是带有两个字段的对象数组," name“字段是语言的名称,"active”字段总是设置为false。
我已经成功地将逗号分隔的字符串转换为字符串数组,但我不知道如何将它转换为对象数组。
db.collection.updateMany(
{},
[
{
"$set": {
"languages": {
$filter: {
input: {
$split: [
"$languages",
","
]
},
cond: {
$gt: [
{
$strLenCP: "$$this"
},
0
]
}
}
}
}
}
])发布于 2022-06-14 06:42:37
您所缺少的只是最后一个$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://stackoverflow.com/questions/72612413
复制相似问题