📌  相关文章
📜  如何从多个表中获取数据 mongoose - Javascript (1)

📅  最后修改于: 2023-12-03 15:37:55.940000             🧑  作者: Mango

如何从多个表中获取数据 (mongoose - Javascript)

在实际的开发中,可能需要从多个表中获取数据。Mongoose 是一个 Node.js 的 MongoDB 驱动程序,它提供了一些方便的方法来执行一个或多个集合的复杂查询。

在本文中,我们将介绍如何从多个表中获取数据并显示在页面中。我们将使用 Mongoose 和 Express 来演示实现过程。

创建数据库及集合

首先,我们需要使用 Mongoose 来连接到 MongoDB 数据库。在本例中,我们将创建两个集合(users 和 orders),以便我们可以从多个表中获取数据。

const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/mydatabase', { useNewUrlParser: true });

const userSchema = new mongoose.Schema({
  name: String,
  email: String
});

const orderSchema = new mongoose.Schema({
  item: String,
  user: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }
});

const User = mongoose.model('User', userSchema);
const Order = mongoose.model('Order', orderSchema);

在上面的代码中,我们定义了两个模式 userSchema 和 orderSchema,并将它们链接到 User 和 Order 的模型上。

创建路由

接下来,我们将创建路由来处理客户端请求。在本例中,我们将获取用户和相关订单的信息,并将它们显示在页面上。

const express = require('express');
const app = express();

app.get('/', (req, res) => {
  User.find({}).populate('orders').exec((err, users) => {
    if (err) {
      res.send(err);
    } else {
      res.send(users);
    }
  });
});

app.listen(3000, () => console.log('Server started'));

在上面的代码中,我们使用 find() 方法来检索所有的 users 记录,并使用 populate() 方法来获取每个用户的 orders 信息。最后,我们将结果作为 JSON 格式返回。

显示数据

最后,我们需要在客户端页面上显示查询结果。

<!DOCTYPE html>
<html>
<head>
<title>Users and Orders</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<body>
<table id="users">
  <thead>
    <tr>
      <th>Name</th>
      <th>Email</th>
      <th>Orders</th>
    </tr>
  </thead>
  <tbody></tbody>
</table>
<script>
  $(document).ready(function() {
    $.getJSON('http://localhost:3000', function(result) {
      $.each(result, function(index, user) {
        const row = $('<tr></tr>');
        $('<td></td>').text(user.name).appendTo(row);
        $('<td></td>').text(user.email).appendTo(row);
        const orders = $('<td></td>').appendTo(row);

        $.each(user.orders, function(index, order) {
          $('<p></p>').text(order.item).appendTo(orders);
        })

        row.appendTo($('#users tbody'));
      })
    })
  })
</script>
</body>
</html>

在上面的代码中,我们使用 jQuery 获取从服务器返回的 JSON 数据,并依次添加到 HTML 表格中。

总结

在本文中,我们介绍了如何从多个表中获取数据并将其显示在客户端页面上。我们使用了 Mongoose 和 Express 来编写代码,并学习了如何使用 Mongoose 的 populate() 方法来执行多个表的联接查询。