最初のオプション ->集計を使用
コレクション内の一部のドキュメントには、permissions
が含まれる場合と含まれない場合があるためです。 フィールドまたはタイプが配列と等しくないため、このエラーが発生します。
$type
を見つけることができます フィールドの配列であり、それが配列ではないか、ドキュメントに存在しない場合は、 $addFields
を使用して配列として追加できます。 および$cond
集約
db.collection.aggregate([
{ "$addFields": {
"permissions": {
"$cond": {
"if": {
"$ne": [ { "$type": "$permissions" }, "array" ]
},
"then": [],
"else": "$permissions"
}
}
}},
{ "$project": {
"filteredChildren": {
"$filter": {
"input": "$moduleChildren",
"as": "moduleChild",
"cond": {
"$in": [ "$$moduleChild._id", "$permissions" ]
}
}
}
}}
])
2番目のオプション ->
使用しているGUIでmongoシェルまたはrobomongoに移動し、このコマンドを実行します
db.collection.update(
{ "permissions": { "$ne": { "$type": "array" } } },
{ "$set": { "permissions": [] } },
{ "multi": true }
)