Tùy chọn đầu tiên -> Sử dụng tổng hợp
Bởi vì một số tài liệu trong bộ sưu tập của bạn có thể có hoặc không thể chứa permissions
trường hoặc là loại không bằng mảng, đó là lý do tại sao bạn gặp lỗi này.
Bạn có thể tìm thấy $type
của trường và nếu nó không phải là một mảng hoặc không tồn tại trong tài liệu của bạn, bạn có thể thêm nó dưới dạng một mảng với $addFields
và $cond
tổng hợp
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" ]
}
}
}
}}
])
Tùy chọn thứ hai ->
Đi tới trình bao mongo hoặc robomongo của bạn trên bất kỳ GUI nào bạn đang sử dụng và chạy lệnh này
db.collection.update(
{ "permissions": { "$ne": { "$type": "array" } } },
{ "$set": { "permissions": [] } },
{ "multi": true }
)