MongoDB是种NoSQL概念数据库(Not only sql)数据库。 MongoDB是基于分布式文件存储的数据库。 简单一句话概括:很强大!性能比MySQL强大、功能更简单、更易用。做大型项目,有很多数据存储的话用它就对了! 1、安装MongoDB是分布式的,建议使用时独立安装在一台服务器、与功能程序分离。 那么,本文示例,一台运行Node程序,另一台装MongoDB。 Win系统下载安装。 下载时选择系统和版本: 然后是一路Next安装: 4.2.2版本,安装后直接就可以用了,不像旧版需要配置数据库和日志地址、还需要手动启动服务。 2、使用在另一台机器,开始编写例程。 首先安装Node的MongoDB客户端模块: npm i mongodb
代码1、连接数据: var MongoClient = require('mongodb').MongoClient;var url = "mongodb://192.168.31.18:27017/jshaman"; MongoClient.connect(url, { useNewUrlParser: true ,useUnifiedTopology: true}, function(err, db) { if (err) { console.log(err.message); }else{ console.log("Database ready!"); db.close(); } });
本例中,192.168.31.18是另一台MongoDB的地址。 执行: 未连接成功,超时了。 有两种原因:另一台机器上的防火墙阻止了连接,或MongoDB的默认配置不允许远程连接。 回到MongoDB安装机器,做如下修改: 关闭防火墙: 修改MongoDB配置文件: 并重启MongoDB服务(不重启的话修改配置不会生效): 再次执行刚才的代码: 连接、创建数据库已成功。 接下来进行数据库操作。 插入数据: var MongoClient = require('mongodb').MongoClient;var url = "mongodb://192.168.31.18:27017/"; MongoClient.connect(url, { useNewUrlParser: true ,useUnifiedTopology: true}, function(err, db) { if (err) { console.log(err.message); }else{ var dbo = db.db("jshaman"); var myobj = { name: "web", url: "www." }; dbo.collection("mywebs").insertOne(myobj, function(err, res) { if (err) throw err; console.log("insert success."); db.close(); }); } });
执行,插入数据成功: 到MongoDB机器,用Mongo命令查看一下刚才插入的数据: show dbs:查看所有的数据库;use jshaman:切换到jshaman库;show tables:查看所有的表;db.mywebs.find():查询所有数据。
上面是插入一条数据,也可以一次插入多条数据: var MongoClient = require('mongodb').MongoClient;var url = "mongodb://192.168.31.18:27017/"; MongoClient.connect(url, { useNewUrlParser: true ,useUnifiedTopology: true}, function(err, db) { if (err) { console.log(err.message); }else{ var dbo = db.db("jshaman"); var myobj = [ { name: 'web1', url: 'http://www.', type: 'cn'}, { name: 'web2', url: 'http://www.', type: 'en'}, { name: 'web3', url: 'https://www.', type: 'en'} ]; dbo.collection("site").insertMany(myobj, function(err, res) { if (err) throw err; console.log("insert numbers: " + res.insertedCount); db.close(); }); } });
res.insertedCount 为插入的条数。 执行: 查询数据: 可以使用 find() 来查找数据, find() 可以返回匹配条件的所有数据。 如果未指定条件,find() 返回集合中的所有数据。 var MongoClient = require('mongodb').MongoClient;var url = "mongodb://192.168.31.18:27017/"; MongoClient.connect(url, { useNewUrlParser: true ,useUnifiedTopology: true}, function(err, db) { if (err) { console.log(err.message); }else{ var dbo = db.db("jshaman"); dbo.collection("site"). find({}).toArray(function(err, result) { if (err) throw err; console.log(result); db.close(); }); } });
执行: 修改代码,加入查询条件: var MongoClient = require('mongodb').MongoClient;var url = "mongodb://192.168.31.18:27017/"; MongoClient.connect(url, { useNewUrlParser: true ,useUnifiedTopology: true}, function(err, db) { if (err) { console.log(err.message); }else{ var dbo = db.db("jshaman"); // 查询条件 var whereStr = {"name":'web1'}; dbo.collection("site").find(whereStr).toArray(function(err, result) { if (err) throw err; console.log(result); db.close(); }); } });
执行: 更新数据: var MongoClient = require('mongodb').MongoClient;var url = "mongodb://192.168.31.18:27017/"; MongoClient.connect(url, { useNewUrlParser: true ,useUnifiedTopology: true}, function(err, db) { if (err) { console.log(err.message); }else{ var dbo = db.db("jshaman"); // 查询条件 var whereStr = {"name":'web1'}; var updateStr = {$set: { "url" : "http://www." }}; // 将名为web1的url改为http://www. dbo.collection("site").updateOne(whereStr, updateStr, function(err, res) { if (err) throw err; console.log("Update success."); db.close(); }); } });
但这个方法只会更新一条数据: 如要更新多条或所有: var MongoClient = require('mongodb').MongoClient;var url = "mongodb://192.168.31.18:27017/"; MongoClient.connect(url, { useNewUrlParser: true ,useUnifiedTopology: true}, function(err, db) { if (err) { console.log(err.message); }else{ var dbo = db.db("jshaman"); // 查询条件 var whereStr = {"name":'web1'}; var updateStr = {$set: { "url" : "http://www." }}; dbo.collection("site").updateMany(whereStr, updateStr, function(err, res) { if (err) throw err; console.log(res.result.nModified + " updated!"); db.close(); }); } });
执行显示: 确认: 删除数据: 删除某一条数据: var MongoClient = require('mongodb').MongoClient;var url = "mongodb://192.168.31.18:27017/"; MongoClient.connect(url, { useNewUrlParser: true ,useUnifiedTopology: true}, function(err, db) { if (err) { console.log(err.message); }else{ var dbo = db.db("jshaman"); // 查询条件 var whereStr = {"name":'web1'}; dbo.collection("site").deleteOne(whereStr, function(err, obj) { if (err) throw err; console.log("delete success"); db.close(); }); } });
删除多条数据: var MongoClient = require('mongodb').MongoClient;var url = "mongodb://192.168.31.18:27017/"; MongoClient.connect(url, { useNewUrlParser: true ,useUnifiedTopology: true}, function(err, db) { if (err) { console.log(err.message); }else{ var dbo = db.db("jshaman"); // 查询条件 var whereStr = {"name":'web1'}; dbo.collection("site").deleteMany(whereStr, function(err, obj) { if (err) throw err; console.log(obj.result.n + " delete success!"); db.close(); }); } });
执行: 更多功能: 排序: 使用 sort() 方法,该方法接受一个参数,规定是升序(1)还是降序(-1)。 代码片段: dbo.collection("site").find().sort(mysort).toArray(function(err, result) { if (err) throw err; console.log(result); db.close();});
分页查询: limit():读取两条数据: dbo.collection("site").find().limit(2).toArray(function(err, result) { if (err) throw err; console.log(result); db.close(); });
skip(): 跳过前面两条数据,读取两条数据: dbo.collection("site").find().skip(2).limit(2).toArray(function(err, result) { if (err) throw err; console.log(result); db.close(); });
MongoDB的常用操作基本就是这些了,感觉怎么样,是不是强大、简单又好用呢? 更多本系列文章:
|