MongoDB的模糊查询可以用正则表达式来查询,比如我想查找文章中是否有某段话,如下:
db.getCollection('posts').find({'content.content':{$regex:'http:\/\/localhost'}})
需要注意的点就是转义,如果是子对象就用.来表示,但是要加引号。附数据库结构:
MongoDB的模糊查询可以用正则表达式来查询,比如我想查找文章中是否有某段话,如下:
db.getCollection('posts').find({'content.content':{$regex:'http:\/\/localhost'}})
需要注意的点就是转义,如果是子对象就用.来表示,但是要加引号。附数据库结构:
正好最近换框架,接触到了mongodb
数据库。然后就有了想法,之前学习的时候做的一个vue的个人博客框架项目使用的是mock,是一个网络版的数据库。初始目的是为了简便而言,操作数据库的话估计系统学习后端才会有涉及。但强迫症的我就是想把数据存放到本地,上B站找了两套视频,莫名其妙的看完了Node.js的初级知识,并写了两篇笔记:Node.js链接MongoDB练习小计以及Node.js学习。最后结果是依然不会(真滴辣鸡)。然后吧,放弃又不甘心。所以利用周末的这两天,又把菜鸟教程的node.js教程浅看了一遍,然后视频又看了一遍,总算是懂了一点点了。算入门了吧。因此就去github上找来一个项目,准备跟着做一遍,并记录笔记。希望最终能学会如果把数据从页面获取存到数据库里吧。
项目地址:一个简单的前后端分离案例
vue init webpack my-project
是上一版vue cli
的命令,目前为:vue create my-project
。
npm run dev
则变为npm run serve
启动就能看到vue.js的欢迎界面。
下载必须的依赖:
npm i express body-parser mongoose --save
之后在根目录添加app.js
,编写启动express服务器的代码。
使用nodemon,方便开发:
npm install nodemon --save
这里我之前已经安装到了全局。
浏览器访问3000端口,就会看到'yo',即表示成功。
因为只是想把数据库存到本地,所以没有特地去了解,有时间会去看文档了解。这里只简单说一下目前的理解。
我的理解是,使用mongodb库也可以做,但是不会区分数据类型,而使用mongoose可以通过新建Schema
来为每个数据确定数据类型。操作如下:
const mc = require('mongodb').MongoClient;
const url = 'mongodb://localhost:27017/test_movie';
mc.connect(url, function (err, client) {
if (err) throw err;
var dbs = client.db();//这里不填则创建的数据库和url中一样,但是如果填写内容,则会优先以db()里的数据库名为准创建数据库。上面可以不填,只在这里填写。
console.log('连接数据库成功');
/** 可以省去
dbs.createCollection('site', (err, r) => {
if (err) throw err;
console.log('创建数据集成功');
});
*/
var site = dbs.collection('post');//如果没有会自动创建数据集
var data = {
name: 'dry',
age: 'nothing'
}
site.insertOne(data, (err, r) => {
if (err) throw err;
console.log('插入数据成功');
client.close();
})
})
有个很明显的问题,就是数据类型没有限定,age显然应该为大于等于0的正整数,因此需要mongoose
(直接使用并不能完全解决问题,还需要自定义类型才可以)。
关于mongoose中的模式类型,见模式类型
const mongoose = require('mongoose');
const url = 'mongodb://localhost:27017/test_movie';
mongoose.connect(url, err => {
if (err) throw err;
var schema = mongoose.Schema({
name: String,
age: Number,
});
var test = mongoose.model('test', schema,'test');//创建数据集和数据模型,第三个参数不填会自动生成复数名称的数据集
var data = {
name: 'dry',
age: '15'
}
test.create(data, (err, data1) => {
console.log('添加数据成功');
console.log(data1);
})
})
这里需要注意三点:
首先,需要在工作目录下安装一个npm提供的mongodb包来连接mongodb
npm i mongodb
然后是连接数据库,如果没有,则创建一个数据库,操作指令如下:
var MC = require('mongodb').MongoClient;//引入模块
const url = 'mongodb://localhost:27017/';// '/'可不要
//或const url = 'mongodb://localhost:27017/test';
//test为数据库名,此处写了下方可以直接var dbase=client.db();
MC.connect(url, function (err, client) {
if (err) throw err;
var dbase = client.db('aaa');
console.log("数据库已创建!");
dbase.createCollection('site', function (err, r) {
if (err) throw err;
console.log('创建集成功');
client.close();
});
});
这样就创建了名为'aaa'的数据库,并在其中创建了名为'site'的数据集。