安装: npm install mongodb —save
官网快速入门: http://mongodb.github.io/node-mongodb-native/3.1/quick-start/quick-start/
API 手册: http://mongodb.github.io/node-mongodb-native/3.1/api/
说明:mongoDB的db和collection不需要提前建立。假设现在mongoDB中不存在数据库wzdp,也不存在表tips,但是执行以下命令后会自动创建库和表。就是这么吊。。。
const wzdp= client.db("wzdp");
wzdp.collection("tips").insertOne({name: "twx"},callback);
建立连接
const MongoClient = require('mongodb').MongoClient;
// Connection URL
const url = 'mongodb://localhost:27017';
MongoClient.connect(url, function(err, client) {
const db = client.db(dbName);
client.close();
});
MongoDB默认端口27017
我稍作封装,如下。优点:不用为了获取db对象而每次都新建连接(建立连接很耗时)
const MongoClient = require('mongodb').MongoClient;
// Connection URL
const url = 'mongodb://localhost:27017';
// Database Name
const dbName = 'wzdp';
var globalDB = "";
const _connect = function (callback) {
if (globalDB != "") {
callback(globalDB);
}else{
MongoClient.connect(url, {
useNewUrlParser: true
}, function (err, client) {
if (err) throw err;
var db = client.db(dbName);
globalDB = db;
callback(db);
});
}
}
插入单条记录
var insertOne = function (collection, data,callback) {
_connect(function (db) {
db.collection(collection).insertOne(data, function (err, res) {
if (err) throw err;
console.log("插入成功,id==>>", res.insertedId);
callback(res);
});
})
}
注意: data必须是对象。edg…{name: “julu”}
插入多条记录
db实例的获取仍然使用上面的_connect方法
/////插入多个
const _insertMany = function (db, collection, array,callback) {
db.collection(collection).insertMany(array, function (err, res) {
if (err) throw err;
console.log(collection, "批量插入==》", res.ops.length);
if(callback)
callback(res);
})
}
var insertMany = function (collection, array,callback) {
_connect(db => {
_insertMany(db, collection, array,callback)
});
}
删除一个
///删除一个
var removeOne = function(collection, filter, callback) {
_connect(db => {
db.collection(collection).deleteOne(filter, function (err, res) {
if (err) throw err;
callback(res);
});
})
}
filter: 相当于where条件。例如: { id: 123456}
我在封装这个方法时,漏了一个options配置项。
完整的delete方法应该是 collection.deleteOne(filter,options,callback)。
详情参考API: http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#deleteOne
删除多个
有两个API可用:
deleteMany
remove
deleteMany方法的用法和deleteOne一模一样,collection.deleteMany(filter,options,callback)
remove方法API手册提示已经过时了(deprecate),建议使用 deleteOne和deleteMany。但是我现在想清空整个collection,
所以我用了这个方法。(附注:mongodb shell 中清空表就是用的remove({}))
///////删除所有
const _removeAll = function (db, collection, callback) {
db.collection(collection).remove({}, function (err, res) {
if (err) throw err;
console.log("已清空collection==>" + collection);
if (callback)
callback(res);
})
}
var removeAll = function (collection, callback) {
_connect(function (db) {
_removeAll(db, collection, callback)
})
}
查找
var findOne = function(collection,filter,callback){
_connect(db => {
db.collection(collection).findOne(filter,function(err,res){
if (err) throw err;
callback(res);
})
})
}
var findAll = function (collection, callback) {
_connect(db => {
db.collection(collection).find({}).toArray(function (err, res) {
if (err) throw err;
callback(res);
})
})
}
var findLastUpdate = function(collection,callback) {
_connect(db => {
db.collection(collection).findOne({},{sort:[['lastUpdateTime','descending']]},function(err,mongoRes){
if(err) throw err;
callback(mongoRes);
})
});
}
findAll: 内部的find方法返回的是Cursor对象,需要toArray。
findLastUpdate: 使用了sort这个配置项