介绍
MongoDB是现代高性能NoSQL数据库的典型代表。它的存储方式是文档型的,基于分布式文件存储,支持水平扩展,能够提供高效的读写操作。同时,它在数据结构设计方面的弹性,也为开发者提供了极大的便利性。在使用中,MongoDB中的数组是一种常见的数据结构,而这种多重数组查询涉及到了这个方面的应用,接下来我们将以AngularJS为前端框架,Node.js为后端框架,来详细了解它的用法。
场景描述
假设我们需要在MongoDB中查询一个包含多重数组的文档,例如:
{
"_id": 1,
"name": "Bob",
"languages": [
{
"type": "Chinese",
"proficiency": "Advanced"
},
{
"type": "English",
"proficiency": "Intermediate"
}
],
"favorites": ["reading", "running"]
}
我们想查询出所有语言中"Chinese"的语言信息以及喜好中"running"的喜好信息,并将其在前端页面中进行显示。
步骤一:创建Node.js后端
1. 安装依赖
在项目文件夹内,使用npm安装以下依赖:
npm install express body-parser mongoose --save
2. 连接MongoDB
为了能够查询MongoDB中的数据,我们需要先进行连接。在项目文件夹中新建一个名为"db.js"的文件,并添加以下代码:
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test', { useNewUrlParser: true, useUnifiedTopology: true });
const connection = mongoose.connection;
connection.on('error', console.error.bind(console, 'connection error:'));
connection.once('open', function() {
console.log("MongoDB database connection established successfully");
});
其中"mongodb://localhost/test"指的是本地安装MongoDB,且使用test数据库。
3. 创建Schema
Schema是MongoDB中的一种数据结构,它的作用类似于关系型数据库的表结构。在项目文件夹中新建一个名为"model.js"的文件,并添加以下代码:
const mongoose = require('mongoose');
const LanguageSchema = new mongoose.Schema({
type: String,
proficiency: String
});
const UserSchema = new mongoose.Schema({
name: String,
languages: [LanguageSchema],
favorites: [String]
});
module.exports = mongoose.model('Users', UserSchema);
通过这个Schema,我们定义了一个名为Users的文档模型,其中包含了name、languages、favorites等数据。
4. 实现查询接口
在项目文件夹中新建一个名为"routes.js"的文件,并添加以下代码:
const express = require('express');
const router = express.Router();
const User = require('./model');
router.get('/users', (req, res) => {
User.find({"languages.type": "Chinese", "favorites": "running"}, function (err, results) {
if (err) {
console.log(err);
res.status(500).send("Error retrieving users");
} else {
res.json(results);
}
});
});
module.exports = router;
上述代码中,我们定义了一个名为/users的get接口,并使用了User模型中的find方法,查询出了所有语言为"Chinese"并且喜好为"running"的用户信息。
5. 在app.js中引入路由配置
在项目文件夹中打开app.js文件并添加以下代码:
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const connectDB = require('./db');
const router = require('./routes');
const app = express();
app.use(cors());
app.use(bodyParser.json());
connectDB();
app.use(router);
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
在这里,我们引入了之前创建好的路由,让其在3000端口上监听请求。
步骤二:创建AngularJS前端
1. 安装依赖
在项目文件夹内,使用npm安装以下依赖:
npm install angular angular-route --save
2. 创建视图
在index.html文件中创建以下视图:
MongoDB
用户列表
姓名
语言
熟练程度
喜好
{{user.name}}
{{user.languages[0].type}}
{{user.languages[0].proficiency}}
{{user.favorites}}
上述代码中,使用了AngularJS的ng-repeat指令来循环显示users数据。我们的查询结果就会在这个表格中展现。
3. 创建控制器
在app.js文件中添加以下代码:
const app = angular.module('myApp', []);
app.controller('myController', function($scope, $http) {
$http.get('http://localhost:3000/users').then(function(response) {
$scope.users = response.data;
});
});
上述代码中,我们使用了$http服务来请求数据,并将返回的数据赋值给$scope.users。
步骤三:运行应用程序
在终端中输入以下命令来启动应用程序:
node app.js
之后可以在浏览器中输入"http://localhost:3000"来访问应用程序,查询结果将在表格中显示。
总结
本文介绍了在MongoDB中进行多重数组查询的应用,以及使用AngularJS将其数据在前端进行展现的基本流程。对于类似于本文场景的应用,可以按照上述步骤进行开发。以上的源代码和示例也可以帮助您更好地理解和实践。