如何在Meteor与MongoDB中获取roles对象的所有字段名?
解决方案
可以实现需求,客户端和服务端都有简洁的实现方式:
客户端实现
拿到查询返回的用户文档后,直接使用JavaScript的Object.keys()方法提取roles对象的键名:
// 假设user是Users.find({_id: userId})返回的文档 const boardNames = Object.keys(user.roles); // 结果:['internal', 'client', 'other']
服务端(MongoDB聚合实现)
如果希望直接从数据库查询得到目标数组,可以使用MongoDB的聚合管道,通过$objectToArray将对象转为键值对数组,再提取键名:
Users.aggregate([ { $match: { _id: userId } }, // 匹配目标用户 { $project: { roles: { $objectToArray: "$roles" } } }, // 将roles对象转为[{k: 'internal', v: [...]}, ...]格式 { $project: { boardNames: "$roles.k" } }, // 提取所有键名组成数组 { $replaceRoot: { newRoot: "$boardNames" } } // 将结果直接返回为数组 ])
内容的提问来源于stack exchange,提问作者Happy1234
相关产品推荐
相关产品推荐

