如何在同集合文档中将admins数组元素去重同步至newAdmins数组
解决方案:将admins数组中未存在于newAdmins的元素合并到newAdmins
以下分两种常见场景给出简便实现:
1. MongoDB数据库层面更新(4.2+版本支持)
使用聚合管道实现原子更新,直接在数据库完成合并逻辑:
db.collection.updateOne( { _id: "60801199bf57265ed8b786bc" }, [ { $set: { newAdmins: { $concatArrays: [ "$newAdmins", { $filter: { input: "$admins", cond: { $not: { $in: ["$$this", "$newAdmins"] } } } } ] } } } ] )
逻辑说明:通过$filter筛选出admins中不在newAdmins的元素,再用$concatArrays将其追加到原newAdmins数组后,最终覆盖原字段。
2. 前端JavaScript处理单个文档对象
如果是在前端处理数据,有两种简洁写法:
写法一:快速去重合并(不严格保留原顺序)
const doc = { _id: "60801199bf57265ed8b786bc", admins: ["Kenny", "Abu", "Raj"], newAdmins: ["Kenny", "Abu"] }; // 利用Set自动去重,再转回数组 doc.newAdmins = [...new Set([...doc.newAdmins, ...doc.admins])];
写法二:严格保留原数组顺序(仅追加不存在的元素)
const doc = { _id: "60801199bf57265ed8b786bc", admins: ["Kenny", "Abu", "Raj"], newAdmins: ["Kenny", "Abu"] }; // 筛选出admins中不在newAdmins的元素,追加到原数组 doc.newAdmins = [...doc.newAdmins, ...doc.admins.filter(item => !doc.newAdmins.includes(item))];
内容的提问来源于stack exchange,提问作者hades
相关产品推荐
相关产品推荐

