【问题标题】:mongoose "Find" with multiple conditions具有多个条件的猫鼬“查找”
【发布时间】:2022-03-09 23:44:12
【问题描述】:

我正在尝试使用 mongoose 过滤器从我的 mongoDB 数据库中获取数据。场景是数据库中的每个用户对象都有特定的字段,如 "Region""Sector"

目前,我正在获取所有在对象中包含关键字 "region" 的用户,如下所示:

 // Filter all healthcare bios by region
 app.get('/user',function(req, res) {

 // use mongoose to get all users in the database
 User.find({region: "NA"}, function(err, user) 
 {
    // if there is an error retrieving, send the error. nothing after res.send(err) will execute
    if (err)
    {
        res.send(err);
    }
    // return all todos in JSON format
    console.log(user);
    res.json(user);

});
});

如何在 mongoose 中设置一些条件,使其返回对象中同时包含“region”和“Sector”的用户。目前它只返回包含 region 关键字的用户。

我曾尝试使用 $and 运算符,但无法正常工作。

【问题讨论】:

  • 我认为没有理由拒绝投票。这个问题很明确,而且我已经向你展示了我到目前为止所做的事情。
  • 或者只是没有展示你试图达到你所要求的目标,只有语法错误可能是它不适合你的原因。所以你的错误并没有得到很好的研究。这是投反对票的标准,因为“错误”对其他人并没有真正的帮助。

标签: javascript node.js mongodb mongoose


【解决方案1】:
app.get('/user',function(req, res) {

 User.find({region: "NA",sector:"Some Sector"}, function(err, user) 
 {
    if (err)
    {
        res.send(err);
    }
    console.log(user);
    res.json(user);

 });
});

如果您想要包含区域的数据:“NA”或扇区:“某个扇区”。您可以使用$or 运算符。

User.find({$or:[{region: "NA"},{sector:"Some Sector"}]}, function(err, user) 
 {
    if (err)
    {
        res.send(err);
    }
    console.log(user);
    res.json(user);

 });

【讨论】:

  • @Vishnu,我将如何搜索区域 = NA 或部门 = Some Sector?我一直在到处寻找这个解决方案。
【解决方案2】:

如果您想要包含任何区域或部门的结果,只要两者同时存在,您需要在 User.find 中进行以下查询: {region: {$exists:true},sector: {$exists:true}}

, 等同于$and,只要您搜索不同的字段。

【讨论】:

    【解决方案3】:
      const dateBetweenDates = await Model.find({
        $or: [
          {
        $and: [
          { From: { $gte: DateFrom } },
          { To: { $lte: DateTo } },
        ],    // and operator body finishes
        },
          { _id: req.user.id},
        ], //Or operator body finishes
      })
    

    【讨论】:

    • 在给出答案时,请尝试在您的代码中附上解释,以便其他人更好地理解逻辑。见how to answer
    【解决方案4】:

    对于其他尝试使用 mongoose 查找多个条件的人,这里是使用 async/await 的代码。

    app.get('/user', async (req, res) {
    
     const user = await User.find({region: "NA",sector:"Some Sector"});
    
     if (user) {
       // DO YOUR THING
     }
    
    });
    

    【讨论】:

      【解决方案5】:

      多个条件

      $lt 选择字段值小于(即

      对于大多数数据类型,比较运算符仅对 BSON 类型与查询值类型匹配的字段执行比较。 MongoDB 通过 Type Bracketing 支持有限的跨 BSON 比较。

      const users = await User.find({ region: "NA", age: { $lt: 30 } });
      

      【讨论】:

        猜你喜欢
        • 2020-08-10
        • 2021-04-07
        • 1970-01-01
        • 2017-02-17
        • 2019-07-10
        • 1970-01-01
        • 1970-01-01
        • 2021-04-10
        • 1970-01-01
        相关资源
        最近更新 更多