如何使用MongoDB查询返回输入数组中未匹配的元素
解决MongoDB筛选不在集合中的UPID需求
我来帮你调整代码实现需求。你的核心目标是找出输入UPID数组中没有出现在任何Groups文档的members.regularStudent字段里的ID,对吧?
实现思路
要完成这个需求,我们需要分两步走:
- 先收集所有Groups文档中已存在的
regularStudentID(自动去重) - 将输入的UPID数组与已存在的ID集合对比,筛选出不存在的元素
修改后的代码
// 输入的UPID数组 let UPID = ["0","1","10"]; // 获取所有Groups文档中members.regularStudent的去重值集合 let existingStudentIDs = db.Groups.distinct("members.regularStudent"); // 筛选出UPID中未出现在已存在集合里的元素 let missingIDs = UPID.filter(id => !existingStudentIDs.includes(id)); // 输出最终结果(格式化JSON格式) printjson(missingIDs);
代码解释
- 使用
db.Groups.distinct("members.regularStudent"):MongoDB的distinct方法会自动遍历所有Groups文档,提取members.regularStudent字段的所有值并去重,返回一个包含所有已存在学生ID的数组。 - 数组
filter方法:遍历输入的UPID数组,通过includes检查当前ID是否不在已存在的集合中,将符合条件的ID收集到missingIDs数组。 printjson:以整洁的JSON形式输出结果,正好匹配你预期的["0","10"]。
原代码的问题说明
你之前的find查询逻辑有误,而且仅通过forEach打印文档,没有做输入数组与文档字段的对比筛选,所以无法得到目标结果。上面的代码直接针对你的需求补全了逻辑,运行后就能得到想要的缺失ID数组。
内容的提问来源于stack exchange,提问作者Kanagaraj Sa
相关产品推荐
相关产品推荐

