node.js - 按 $in 和布尔值过滤
问题描述
我想使用带有两个过滤器的 find() 获取文档(在这种情况下为产品),第一个是state = true,第二个是产品是否属于请求中收到的类别。
我正在用这种方式制作过滤器
let categories = req.body;
Product.find({ state: true, "category": {$in : categories} }...
这个过滤器给我带来了属于某个类别的产品,但不尊重产品的 state = true 或 false。
我做错了什么?
谢谢。
例如:
{
"_id" : ObjectId("601b9ef73faa662db0b29204"),
"state" : true,
"code" : "APE700JAGE",
"category" : ObjectId("601b98853faa662db0b291e5"),
}
{
"_id" : ObjectId("601b9ef73faa662db0b29204"),
"state" : false,
"code" : "PRU123FAKK",
"category" : ObjectId("601b98853faa662db0b291e5"),
}
要求:
{
categories: [ '601b98853faa662db0b291e5' ]
}
解决方案
有几个修复:
- 您
req.body
在类别变量中传递整体,您只需要传递req.body.categories
let categories = req.body.categories;
- 是字符串 id的
categories
数组,您需要将其转换为对象 id,mongoose.Types.ObjectId
因为类别是文档中的对象 id
let categories = req.body.categories.map(c => mongoose.Types.ObjectId(c));
推荐阅读
- flutter - 如何计算和形式 List < Map >?
- css - 如何根据设备尺寸指定边距?
- angular - 为什么在 Angular 10 上使用 D3 进行力有向图时,“SimulationNodeDatum”会出现错误?
- bluetooth - 如何更改 PC 标准 COM 端口波特率?
- javascript - 为什么我无法访问来自 ReactJS 中道具的对象的属性?
- rust - 如何跨文件持久化结构实例?
- java - ForkJoin 在 1 个线程上运行
- python - 我有一个安装了 Debian 的 linux 子系统,但我需要知道如何将它链接到我的计算机的其余部分
- ruby-on-rails - Rails - 意外的对象返回值 Rational
- google-cloud-platform - gcloud“配置设置projectId”不起作用