【问题标题】:Filter by $in and boolean按 $in 和布尔值过滤
【发布时间】:2021-05-28 00:37:20
【问题描述】:

我想使用带有两个过滤器的 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.js mongodb mongoose


    【解决方案1】:

    有一些修复:

    • 您在类别变量中传递整个req.body,您只需要传递req.body.categories
    let categories = req.body.categories;
    
    • categories 是字符串 ID 数组,您需要使用 mongoose.Types.ObjectId 将其转换为对象 ID,因为类别是文档中的对象 ID
    let categories = req.body.categories.map(c => mongoose.Types.ObjectId(c));
    

    【讨论】:

    • 是的,但问题是我得到了 state = false 的产品,类别过滤器工作正常。
    • 它是如何工作的,它如何匹配来自对象的类别条件,第二件事你的查询是好的,你只需要验证其他的东西,比如与正确服务器的数据库连接和集合名称是否正确。
    • 我正在获取具有正确类别的文档,但文档的状态是错误的,这给我带来了 state = false 的文档,我只想要 state = true 的文档跨度>
    • 我明白你的意思,但查询很好,请参阅playground 你需要检查其他可能性。
    猜你喜欢
    • 2017-06-25
    • 2020-05-15
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    相关资源
    最近更新 更多