繁体   English   中英

如何在查找方法 mongoose 中运行多个查询?

[英]How to run multiple query in find method mongoose?

我有一个 controller 并且我正在查询 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"
    }

使用我的 controller 查询后它发送message=[]我在做什么错?

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

从 MongoDB 4.4 开始, $where不再支持已弃用的 BSON 类型 JavaScript 代码和 scope(BSON 类型 15)。 $where运算符仅支持 BSON 类型字符串(BSON 类型 2)或 BSON 类型 JavaScript(BSON 类型 13)。 自 MongoDB 4.2.1 起,不推荐将 BSON 类型 JavaScript 与 scope 一起用于$where

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

  • 使用$expr条件和$gt运算符和$size来获取数组的大小
  • $toIntexpected_views从字符串转换为 integer
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 });
});

操场

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM