通过字段查询猫鼬

时间:2018-09-27 00:23:00

标签: mongodb express mongoose

我正在尝试查询快递中的猫鼬对象' Order '。但是,当我在 find 上的括号之间添加 querystring 变量时,它不起作用。我对如何解决此问题的文档有些迷茫。

router.get('/allorders', jwtAuth, function(req,res,next) {
    const userID = req.user.username;
    const querystring = "{orderedByUser: '" + userID + "'}";

//Order.find() works

Order.find(querystring)
.then(orders =>{
     res.json(orders).end();
}).catch( err=> {
    res.status(500).json({error: 'Something went wrong!'});
      });
});

2 个答案:

答案 0 :(得分:1)

您知道为什么,因为您需要传递给Model.find()的条件必须是object

  

Model.find()

     

参数

     
      
  • 条件“对象”
  •   
  • 要返回的[投影]«对象|字符串»可选字段,请参阅Query.prototype.select()
  •   
  • [选项]«对象»可选,请参阅Query.prototype.setOptions()
  •   
  • [回调]«功能»
  •   
     

返回

     
      
  • «查询»
  •   
     

查找文档

例如:

// named john and at least 18
MyModel.find({ name: 'john', age: { $gte: 18 }});

// executes immediately, passing results to callback
MyModel.find({ name: 'john', age: { $gte: 18 }}, function (err, docs) {});

在您的代码中,您正在向该方法传递string而不是object

然后,尝试以下操作:

router.get('/allorders', jwtAuth, function(req,res,next) {
    const userID = req.user.username;
    const conditionsObject = {orderedByUser: userID}; // fixed

//Order.find() works

Order.find(conditionsObject) // fixed
.then(orders =>{
     res.json(orders).end();
}).catch( err=> {
    res.status(500).json({error: 'Something went wrong!'});
      });
});

有关Model.find()方法的更多信息,您可以在这里阅读:https://mongoosejs.com/docs/api.html#model_Model.find

希望它会有所帮助。

答案 1 :(得分:0)

find接受查询 object ,而不是字符串。所以应该是:

Order.find({orderedByUser: userID}).then(...