首页 > 解决方案 > 按 $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' ]
}

标签: node.jsmongodbmongoose

解决方案


有几个修复:

  • 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));

推荐阅读