安装: 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,但是执行以下命令后会自动创建库和表。就是这么吊。。。

  1. const wzdp= client.db("wzdp");
  2. wzdp.collection("tips").insertOne({name: "twx"},callback);

建立连接

  1. const MongoClient = require('mongodb').MongoClient;
  2. // Connection URL
  3. const url = 'mongodb://localhost:27017';
  4. MongoClient.connect(url, function(err, client) {
  5. const db = client.db(dbName);
  6. client.close();
  7. });

MongoDB默认端口27017

我稍作封装,如下。优点:不用为了获取db对象而每次都新建连接(建立连接很耗时)

  1. const MongoClient = require('mongodb').MongoClient;
  2. // Connection URL
  3. const url = 'mongodb://localhost:27017';
  4. // Database Name
  5. const dbName = 'wzdp';
  6. var globalDB = "";
  7. const _connect = function (callback) {
  8. if (globalDB != "") {
  9. callback(globalDB);
  10. }else{
  11. MongoClient.connect(url, {
  12. useNewUrlParser: true
  13. }, function (err, client) {
  14. if (err) throw err;
  15. var db = client.db(dbName);
  16. globalDB = db;
  17. callback(db);
  18. });
  19. }
  20. }

插入单条记录

  1. var insertOne = function (collection, data,callback) {
  2. _connect(function (db) {
  3. db.collection(collection).insertOne(data, function (err, res) {
  4. if (err) throw err;
  5. console.log("插入成功,id==>>", res.insertedId);
  6. callback(res);
  7. });
  8. })
  9. }

注意: 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配置项。Node MongoDB使用 - 图1

完整的delete方法应该是 collection.deleteOne(filter,options,callback)。
详情参考API: http://mongodb.github.io/node-mongodb-native/3.1/api/Collection.html#deleteOne

删除多个

有两个API可用:

  1. deleteMany

  2. 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);
        })

    });
}
  1. findAll: 内部的find方法返回的是Cursor对象,需要toArray。

  2. findLastUpdate: 使用了sort这个配置项