【问题标题】:Express mongodb find query results empty arrayexpress mongodb查找查询结果空数组
【发布时间】:2021-10-01 15:01:22
【问题描述】:

我正在尝试对我的快速服务器进行 API 调用,以根据位置 ID 获取在同一地点工作的员工。但是,API 调用在命令行界面中运行时只返回一个空数组。

员工模型

module.exports = mongoose => {
  var schema = mongoose.Schema(
    {
      first_name: String,
      last_name: String,
      address: {
        housenumber: Number,
        street: String,
        city: String,
        zip: Number,
        country: String
      },
      phone: Number,
      mobile: Number,
      email: String,
      enrollment_date: Date,
      staff_id: Number,
      location: { type : mongoose.Schema.ObjectId, ref : 'location' },
      department: String,
      function: String, 
      active: Boolean
    },
    { timestamps: true }
  );

  schema.method("toJSON", function() {
    const { __v, _id, ...object } = this.toObject();
    object.id = _id;
    return object;
  });

  const Employee = mongoose.model("employee", schema);
  return Employee;
};

API 的员工路由

  router.get("/location/:location_id", employees.findAllByLocation);

员工控制器处理上述调用

exports.findAllByLocation = (req, res) => {
  Employee.find({ location: req.params.location_id })
    .then(data => {
      res.send(data);
    })
    .catch(err => {
      res.status(500).send({
        message:
          err.message || "Some error occurred while retrieving Employees."
      });
    });
};

要测试的虚拟数据库数据

Postman API 调用结果

但是,尝试在命令行界面中找到具有该位置 ID 的用户确实有效并提供了所需的输出。

[

所以不知何故它搞砸了,我似乎无法弄清楚它为什么会这样做。我做了一些研究,发现它可能与作为 ObjectId 的引用的位置有关。所以我尝试将 req.params.location_id 包装到 ObjectId 可能会修复它,但没有奏效。

让这个工作的最佳方法是什么?

【问题讨论】:

  • 该路由器的 app.use() 是什么?
  • app.use("/api/employees", router); 该方法有点用,如果我忽略按位置查找的条件,它会显示所有员工的列表。它只是以某种方式无法正确处理位置 ID。
  • @m1ch14l 您已将location 定义为架构级别的ObjectId,但显然它在数据库中存储为String(来自屏幕截图)?尝试使用location 更改数据库条目以更正ObjectId,然后进行测试。
  • @ambianBeing 我现在觉得很傻,我在数据库中更改了它,现在它运行良好。非常感谢!
  • @m1ch14l 非常欢迎。它一直发生在我们的开发者身上????

标签: javascript node.js angular mongodb express


【解决方案1】:

为了使用 Promise 链,你必须返回一些东西,然后返回的值将被链式传递给“then()”作为数据。在您的示例中,您应该

      return Employee.find({location:req.params.location_id})

【讨论】:

  • 输出仍然只是[]
  • 你能在控制器中使用console.log(req.params.location_id)吗
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-14
  • 2016-02-07
  • 2015-11-16
  • 2021-07-22
  • 1970-01-01
  • 2021-10-26
相关资源
最近更新 更多