如何从Mongoose findOne查询结果中提取嵌套的categories数组
解决方案
方案1:使用聚合管道直接查询得到目标数组
你可以通过MongoDB的聚合框架在查询阶段就直接提取到你需要的内层categories数组,不需要后续手动处理,代码如下:
const result = await Categories.aggregate([ // 匹配外层slug等于_gender的文档 { $match: { slug: _gender } }, // 拆分外层categories数组 { $unwind: "$categories" }, // 匹配categories下slug等于_mainCategory的元素 { $match: { "categories.slug": _mainCategory } }, // 直接返回内层的categories数组为最终结果 { $replaceRoot: { newRoot: "$categories.categories" } } ]) // 最终你需要的数组就是 result
方案2:对现有查询结果直接提取
如果你不想改动现有查询逻辑,直接对返回结果做一层取值即可:
const queryResult = await Categories.findOne({slug : _gender} , { _id : 0 , categories :{$elemMatch : {slug : _mainCategory}}}) // 直接提取目标数组 const targetCategories = queryResult?.categories?.[0]?.categories
内容的提问来源于stack exchange,提问作者murat.karaca
相关产品推荐
相关产品推荐

