Mongoose中对应MongoDB $all数组查询的等价实现方法是什么
解决方案
你需要将查询条件中的$in操作符替换为$all操作符即可实现需求,Mongoose完全兼容MongoDB原生的$all查询语法,和你提到的原生MongoDB写法一致。
操作符区别
$in:只要字段数组包含查询数组的任意一个元素,就命中对应文档,这是你当前返回结果不符合预期的原因$all:要求字段数组必须包含查询数组的全部元素,才会命中对应文档,刚好满足筛选同时具备多项技能的需求
调整后的代码
app.post('/artisanprofile', function(req, res){ const profile = []; const result = req.body.search; console.log(result); console.log(typeof result); const specialities = result.split(" "); console.log(specialities); Artisan.find({ // 仅将此处的$in替换为$all即可 'speciality': { $all: specialities } }, function(err, profiles) { if(err){ console.log(err); } else{ console.log(profiles); } }); });
你提到的原生MongoDB语句对应的Mongoose等价写法
Inventory.find({ tags: { $all: ["red", "blank"] } })
可选扩展(按需使用)
如果你需要筛选技能列表和输入的技能数组完全一致(不多不少,没有额外技能),可以额外补充$size条件:
Artisan.find({ 'speciality': { $all: specialities, $size: specialities.length } }, ...)
内容的提问来源于stack exchange,提问作者Khaoula Qassibi
相关产品推荐
相关产品推荐

