首页 > 解决方案 > 通过字段使用 Mongoose 进行查询

问题描述

我正在尝试以快递查询此猫鼬对象“ Order ”。但是,当我在find的括号之间添加查询字符串变量时,它不起作用。我对如何解决这个问题的文档有点迷茫。

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!'});
      });
});

标签: mongodbexpressmongoose

解决方案


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

模型.find()

参数

  • 条件«对象»
  • [投影] «Object|String» 要返回的可选字段,请参见 Query.prototype.select()
  • [选项] «Object» 可选参见 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) {});

在您的代码中,您将 a 传递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

希望它有所帮助。


推荐阅读