目录
(3)组合使用skip选项和limit选项可以实现查询结果分页
一、连接到MongoDB
1、安装mongoDB包
- 原生MongoDB驱动的包名为mongodb
- 安装该包:cnpm install mongodb --save
2、建立MongoDB的连接
const MongoClient = require('mongodb').MongoClient; //导入模块获取连接客户端
const url = 'mongodb://localhost:27017'; // 连接URL
const dbName = 'testmgdb'; // 数据库名称
MongoClient.connect(url, {useNewUrlParser: true}, function(err, client) {
if (err) throw err;
console.log("成功连接到MongoDB服务器");
const db = client.db(dbName); //选择一个数据库
client.close(); //关闭连接
});
二、添加MongoDB文档
1、往集合中添加单个文档
const MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://localhost:27017';
const dbName = 'testmgdb';
//连接到MongoDB
MongoClient.connect(url, {useNewUrlParser: true},function(err, client) {
if (err) throw err;
const db = client.db(dbName); //选择数据库
const coll = db.collection('bookinfo'); // 选择一个集合(表)
//执行添加文档操作
const myobj = { "isbn":"9787115474582","name":"Docker实践","author":"尹恩•米尔","press":"人民邮电出版社","price":79.00,"pubdate":"2018-02-01"};
col.insertOne(myobj, function(err, res) {
if (err) throw err;
console.log("文档添加成功");
console.log(res); //输出结果
client.close(); //关闭连接
});
});
2、往集合中添加多个文档
const myobj = [{
"isbn":"9787115428028",
"name":"Python编程从入门到实践",
"author":"袁国忠",
"press":"人民邮电出版社",
"price":"89.00",
"pubdate":"2016-07-01"
},
{
"isbn":"9787115373557",
"name":"数学之美(第二版)",
"author":"吴军",
"press":"人民邮电出版社",
"price":"49.00",
"pubdate":"2014-11-01"
}];
db.collection('bookinfo').insertMany(myobj, function(err, res) {
if (err) throw err;
console.log("插入的文档数为: " + res.insertedCount);
});
三、查询MongoDB文档
1、基本查询
(1)基本查询示例
db.collection('bookinfo').find({}).toArray(function(err, docs) {
if (err) throw err;
console.log("找到下列记录:");
console.log(docs);
client.close();
});
(2)条件查询示例
var filterStr = {"press": '人民邮电出版社'}; // 查询条件
db.collection('bookinfo').find(filterStr).toArray(function(err, docs) {
if (err) throw err;
console.log("找到下列记录:");
console.log(docs);
client.close();
});
2、使用查询操作符
(1)查找出age大于30的文档
{ "age": { "$gt": 30 }}
(2)复杂的组合查询
{ $and: [ { $or: [{a: 1}, {b: 1}] }, { $or: [{c: 1}, {d: 1}] } ]}
3、返回指定的查询字段
find({},{ projection:{'isbn':1,'name':1}})
4、查询结果排序
find({},{projection:{'isbn':1,'name':1},sort:{'isbn':-1}})
5、查询结果分页
(1)使用limit选项限制返回的文档数
find({},{limit:2})
(2)使用skip选项指定跳过的文档数
find({},{ skip:2 , limit:2 })
(3)组合使用skip选项和limit选项可以实现查询结果分页
var pageSize = 5; //每页数据条数
var currentPage = 2; //当前页数
var skipNum = {currentPage -1} * pageSize; //跳过条数
find({},{ skip: skipNum , limit: pageSize })
四、更改MongoDB文档
1、使用updateMany()方法来更改符合条件的文档
updateMany(filter, update, options, callback)
示例:
var filterStr = { press: '人民邮电出版社'}; // 更改条件
var updateStr = { $set : { "url" : "http://www.ptress.com.cn" }};
db.collection('bookinfo').updateMany(filterStr, updateStr,function(err, docs) {
if (err) throw err;
console.log("更改文档数为:"+ docs.result.nModified);
client.close();
});
五、删除MongoDB文档
1、删除一个文档可使用deleteOne()方法
2、删除多个文档可以使用deleteMany()方法
示例:
var filterStr = {"isbn":"9787301299487"}; // 删除条件
db.collection('bookinfo').deleteMany(filterStr,function(err, docs) {
if (err) throw err;
console.log("删除文档数为:"+ docs.result.n);
client.close();
});
});
六、为MongoDB集合创建索引
1、使用createIndex()方法创建索引
createIndex(fieldOrSpec, options, callback)
示例:
db.collection('bookinfo').createIndex({ "isbn": 1 }, null,function(err, results) {
if (err) throw err;
console.log(results);
client.close();
});
});
七、以“同步”方式编写MongoDB操作代码
const MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://localhost:27017'; // 连接URL
const dbName = 'testmgdb'; // 数据库名称
const collName = 'bookinfo'; // 集合名称
async function getConnect() { //声明建立连接的async函数
try {
let connect = await MongoClient.connect(url, {useNewUrlParser: true});
return connect;
} catch (err) {
throw err;
}
}
async function getBookInfo() { //声明查询操作的async函数
//“顺序”执行以下步骤
let connect = await getConnect(); //执行建立连接的async函数
let coll = connect.db(dbName).collection(collName); //得到集合对象
let result = await coll.find({}).toArray(); //查询文档
connect.close(); //关闭连接
return result; //返回查询结果(这是Promise对象)
}
getBookInfo().then(data => { //执行查询操作async函数,并继续处理Promise对象
console.log("查询的数据:", JSON.stringify(data, null, 4)); // 获取返回的内容
}).catch(error => {
console.log(error); // 捕获错误
});