You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 00:36:04