如何通过对象数组中的_id字段使用Mongoose执行查询?
问题根因
你使用的members._id写法无法生效的原因是:members是对象数组,数组本身不存在_id属性,只有数组内的每一个元素对象才持有_id字段,因此需要先把所有元素的_id提取出来组成一维的id数组,再传给$in操作符。
正确写法
首先用map方法遍历对象数组提取所有_id:
// 提取_id数组 const memberIdList = members.map(member => member._id); // 执行查询 const files = await File.find({ _id: { $in: memberIdList } });
注意事项
如果你的members数组中存储的_id是字符串格式,而Mongoose schema中_id默认是ObjectId类型,也可以手动做类型转换保证查询匹配:
const mongoose = require('mongoose'); const memberIdList = members.map(member => mongoose.Types.ObjectId(member._id)); const files = await File.find({ _id: { $in: memberIdList } });
内容的提问来源于stack exchange,提问作者Vivek Jaiswal
相关产品推荐
相关产品推荐

