Mongoose复杂结构下find/project查询问题求助
解决你的Mongoose查询问题
我来帮你排查这个查询里的问题,看了你的Schema和写的查询语句,有几个关键的小错误导致你查不到数据,咱们一步步来修正:
1. 字段名不匹配
你定义的Schema里是chkpt.subDocs,但查询的时候写成了chkpt.modifiedSubDocs——这俩字段名对不上啊!MongoDB肯定找不到对应的数据。你得二选一:要么把Schema里的subDocs改成modifiedSubDocs,要么把查询里的字段名改成subDocs,先把这个统一了。
2. 属性路径写错了
再看Schema里的attributes结构:每个元素是{ _id: { name: String }, value: [ { string: String } ] },你查询的时候写的是attributes.id.name,但正确的字段是_id.name(注意下划线!),这是查询不到结果的核心原因之一。
3. 修正后的完整查询代码
假设你打算保留Schema里的subDocs字段,那修正后的查询应该是这样:
Subscriber.find( { 'chkpt.subDocs.newValues.attributes._id.name': 'blabla' }, 'chkpt.subDocs.newValues.attributes.value.string', function (err, subscribers) { if (err) { console.error('查询出错:', err); return; } // 这里处理拿到的订阅者数据 console.log('查询结果:', subscribers); } );
额外小提示:精准匹配数组元素
因为subDocs和attributes都是数组,默认情况下MongoDB会返回包含至少一个匹配元素的整个文档,如果你只想拿到数组里符合条件的那部分元素,而不是整个数组,可以用$elemMatch来过滤:
Subscriber.find( { 'chkpt.subDocs.newValues.attributes._id.name': 'blabla' }, { 'chkpt.subDocs.newValues.attributes': { $elemMatch: { '_id.name': 'blabla' } } }, function (err, subscribers) { if (err) { console.error('查询出错:', err); return; } console.log('精准匹配的结果:', subscribers); } );
这样返回的attributes数组里就只有_id.name等于blabla的元素啦。
内容的提问来源于stack exchange,提问作者user9709703
相关产品推荐
相关产品推荐

