在Node中操作MongoDB数据库(一):mongodb
您好,我是沧沧凉凉,是一名前端开发者,目前在掘金、知乎以及个人博客上同步发表一些学习前端时遇到的趣事和知识,欢迎关注。
在写一些个人项目中,或者一些爬虫,一些工具一些脚本中,总会有存储数据的需求,而通过Node,作为一个前端也是可以使用JS编写简单的后端项目的。
在Node项目中,经常会使用MongoDB来做数据库,因为Node服务一般都是小型的服务,并且JS它是单线程,所以无法最大化发挥多核CPU的威力,所以大型服务还是得用Java或者C++这种静态语言进行编写。
就因为这种小型服务,所以使用MongoDB来做数据库就非常方便,不用建表不用写SQL语句,操作起来简单快捷,而且如果是较大的项目,后端这种东西还是交给专业的后端人员比较好。
阅读本篇文章之前,你首先需要了解MongoDB相关知识,至少得知道如何搭建一个MongoDB数据,当然这些知识并不在本篇文章的范围内。
当然你还得具有一部分的Node知识,因为浏览器环境下是没有办法访问数据库的,只有通过Node服务才能访问数据库。
连接
要连接数据库你首先得要有一个数据库,你有了数据库后就可以连接数据了:
MongoDB默认只支持本地连接,同时如果是生产环境下的数据,强烈推荐本地连接,不要开放数据库到外网环境中,一旦你将数据库开放到外网环境中,可能不怀好意的人会直接攻击你的数据库。
其实将电脑内网穿透出来,然后通过外网远程控制也是非常危险的,我记得前一段时间有一个大公司的员工将自己的电脑内穿出来,黑客攻击了他的电脑,并且顺带攻击了整个局域网的电脑。
我之前将电脑内网穿透时,由于连接密码设置的太过于简单,中了比特币病毒…电脑上面所有的文件都被锁了,最后的解决方法是重装了系统,将整个电脑硬盘进行了格式化。
不过这件事对我没有造成什么损失,因为我有个习惯是所有资料、代码都会存储到云端,存储到云端除了换电脑的时候很方便之外,还可以预防这种电脑中病毒的情况。
所以说将个人电脑暴露在公网中是一件非常危险的事情。
扯远了,下面我们来看一下如何通过mongodb这个库连接数据库。
const MongoClient = require("mongodb").MongoClient;
let url = "mongodb://localhost:27017";
MongoClient.connect(url).then((db) => {
// 下面是对集合的操作,如果没有数据库和集合则会自动新增。
const site = db.db("test").collection("age");
// 数据库操作完毕后得关闭连接,不然Node服务不会退出。
db.close();
});
mongodb的方法都支持Promise,所以我们可以直接通过.then
进行链式调用。
增
插入单条数据
site.insertOne(obj).then(res=>{
console.log(res)
db.close();
})
插入多条数据
const obj = [
{ name: '菜鸟工具', url: 'https://c.runoob.com', type: 'cn'},
{ name: 'Google', url: 'https://www.google.com', type: 'en'},
{ name: 'Facebook', url: 'https://www.google.com', type: 'en'}
];
site.insertMany(obj).then(res=>{
console.log(res)
db.close()
})
res的返回值
{
acknowledged: true,
insertedCount: 3,
insertedIds: {
'0': new ObjectId("6142fe73ee5f5e6ce3c970a3"),
'1': new ObjectId("6142fe73ee5f5e6ce3c970a4"),
'2': new ObjectId("6142fe73ee5f5e6ce3c970a5")
}
}
删
deleteOne()
:删除一条
如果要删除多条语句可以使用 deleteMany()
方法
删除集合
可以使用 drop()
方法来删除集合
改
更新一条数据updateOne
const whereStr = {"name":'菜鸟教程'}; // 查询条件
const updateStr = {$set: { "url" : "https://www.runoob.com" }};
site.updateOne(whereStr, updateStr).then((res) =>{
console.log(res);
db.close();
});
更新所有符合条的文档数据可以使用 updateMany()
:
也可以通过id来进行修改,
查
可以使用find()
来查找数据,find()
可以返回匹配条件的所有数据。 如果未指定条件,find()
返回集合中的所有数据。
site.find({}).toArray().then(res=>{
console.log(res);
db.close()
})
排序
sort() 方法,该方法接受一个参数,规定是升序(1)还是降序(-1)。
查询分页
要设置指定的返回条数可以使用limit()
方法,该方法只接受一个参数,指定了返回的条数。
如果要指定跳过的条数,可以使用skip()
方法。
最后
如果是脚本通过这种方式是非常方便的,但如果你要用Node创建一个服务,那么还是推荐用另一个库:mongoose,该库来做服务的话拥有数据类型等,安全性要比mongodb好上那么一些。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!