【问题标题】:Return json from MongoDB从 MongoDB 返回 json
【发布时间】:2020-04-09 14:24:17
【问题描述】:

我以这种方式从数据库返回我的第一行

     const myobj = Post.find().sort({_id:-1}).limit(1);

但是当我尝试为我的数组定义值时,它返回:[{"id":1}]

    app.get("/api/solutions", (req, res) => {
        const myobj = Post.find().sort({_id:-1}).limit(1);
        const solutions = [
          {
              id: 1,
              title: myobj.title,
              subTitle: myobj.slogan,
              description: myobj.description
          },
        ]
        res.json(solutions);
     });
    const port = 5000;
    app.listen(port, () => console.log(`Server started on port ${port}`));

我该如何解决这个问题?

【问题讨论】:

  • 为什么{_id: -1}

标签: node.js mongodb express mongoose


【解决方案1】:

与 Node 世界中的许多事物一样,Mongoose 请求是异步的。您不是在等待数据库返回其结果。你需要await它。

另外,.find() 返回一个数组。 .find().limit(1) 将返回一个包含 1 个元素的数组。您想使用返回一个文档的.findOne()

app.get("/api/solutions", async (req, res) => { // <-- add async

        const myobj = await Post // await Mongoose
                          .findOne() // Replace find().limit(1) with .findOne()
                          .sort({_id:-1}) // I don't think this is useful
                          .exec(); // add .exec()

        const solutions = [
          {
              id: 1,
              title: myobj.title,
              subTitle: myobj.slogan,
              description: myobj.description
          },
        ]
        res.json(solutions);
});

const port = 5000;
app.listen(port, () => console.log(`Server started on port ${port}`));

【讨论】:

  • 如果你 console.log(myobj) 怎么办?输出是什么?
  • 它仍然返回 [{"id":1}]
  • consol.log return [ { _id: 5e8f0eee09610c08dc2cfc12, title: '我的标题', slogan: '我的口号', description: '我的描述', __v: 0 } ]
  • 但是当我输入 "/api/solutions" 我仍然看到 [{"id":1}]
  • Aaaaaaaah,我知道,您使用的是 find(),它返回一个数组,而不是 findOne(),它返回一个文档。那就是你想要的。答案已更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-01
  • 2017-08-04
  • 1970-01-01
  • 2011-08-27
  • 2012-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多