【问题标题】:How to run multiple query in find method mongoose?如何在查找方法猫鼬中运行多个查询?
【发布时间】:2021-08-03 00:15:20
【问题描述】:

我有一个控制器,我正在查询 find 方法,例如:

Campaign.find({'setting.types':'views','ownerId':{$ne:userId},$where:"this.expected_views>this.views.length"}).exec().then(doc=>{
    res.status(200).json({
        'message':doc
    })
})

我的数据库是这样的:

{
        "setting": {
            "bill": "900",
            "dateTime": "23-3-2020",
            "expected_time": "30",
            "expected_views": "30",
            "types": "views"
        },
        "views": [
            {
                "5678908ygvhjkhgg": true
            },
            {
                "hjsgsss687sHJSjhs": true
            }
        ],
        "_id": "609b7260e798aa14f8b6b2be",
        "id": "609b7260e798aa14f8b6b2bd",
        "imageUrl": "file.jpg",
        "link": "link",
        "ownerId": "dakdjdakdadmnkdsa"
    }

使用我的控制器查询它发送的响应 message=[] 我在做什么错了?

我的$where:"this.expected_views>this.views.length" 子句不起作用..

【问题讨论】:

    标签: node.js arrays mongodb express mongoose


    【解决方案1】:

    从 MongoDB 4.4 开始,$where 不再支持已弃用的具有范围的 BSON 类型 JavaScript 代码(BSON 类型 15)。 $where 运算符仅支持 BSON 类型 String(BSON 类型 2)或 BSON 类型 JavaScript(BSON 类型 13)。自 MongoDB 4.2.1 起,使用范围为 $where 的 BSON 类型 JavaScript 已被弃用。

    我建议您使用$expr,从 MongoDB 3.6 开始,$expr 运算符允许在查询语言中使用聚合表达式。

    • 使用$expr 条件和$gt 运算符和$size 来获取数组的大小
    • $toIntexpected_views 从字符串转换为整数
    Campaign.find({
      $and: [
        {
          "setting.types": "views",
          "ownerId": { $ne: userId }
        },
        {
          $expr: {
            $gt: [{ $toInt: "$setting.expected_views" }, { $size: "$views" }]
          }
        }
      ]
    }).exec().then(doc => {
      res.status(200).json({ 'message': doc });
    });
    

    Playground

    【讨论】:

    • 哇,你太棒了,解释得很好,先生,你能解释一下 $and 的用法吗?
    • 对包含一个或多个表达式/条件的数组执行逻辑与运算,并选择满足数组中所有表达式的文档。
    • 当我的“expected_views”小于数组“views”的大小时它仍然响应?根据它不应该显示的条件..
    • 因为expected_views 是字符串,它需要转换为整数,请检查更新的答案。
    • 精湛的旅行。谢谢
    猜你喜欢
    • 2017-06-08
    • 2017-04-18
    • 2017-06-04
    • 1970-01-01
    • 2018-10-14
    • 2012-09-30
    • 2018-02-27
    • 2020-08-07
    • 2017-05-08
    相关资源
    最近更新 更多