nodejs - nedb 封装库

libs/nedb.js

const Datastore = require('nedb');

function DB(database) {
    let options = {
        filename: database,
        autoload: true,
    };
    this.db = new Datastore(options);
}

DB.prototype.limit = function(offset, limit) {
    this.offset = offset || 0;
    this.limit = limit || 15;
    return this;
}

DB.prototype.sort = function(orderby) {
    this.orderby = orderby;
    return this;
}

DB.prototype.find = function(query, select) {
    return new Promise((resolve, reject) => {
        let stmt = this.db.find(query || {});
        if (this.orderby !== undefined) {
            stmt.sort(this.orderby);
        }
        if (this.offset !== undefined) {
            stmt.skip(this.offset).limit(this.limit);
        }
        if (select != undefined) {
            stmt.projection(select || {});
        }
        stmt.exec((err, docs) => {
            if (err) {
                return reject(err);
            }
            resolve(docs);
        })
    })
};

DB.prototype.findOne = function(query, select) {
    return new Promise((resolve, reject) => {
        let stmt = this.db.findOne(query || {});
        if (this.sort !== undefined) {
            stmt.sort(this.sort);
        }
        if (select != undefined) {
            stmt.projection(select || {});
        }
        stmt.exec((err, doc) => {
            if (err) {
                return reject(err);
            }
            resolve(doc);
        })
    })
}

DB.prototype.insert = function(values) {
    return new Promise((resolve, reject) => {
        this.db.insert(values, (err, newDoc) => {
            if (err) {
                return reject(err);
            }
            resolve(newDoc);
        })
    })
}

DB.prototype.update = function(query, values, options) {
    return new Promise((resolve, reject) => {
        this.db.update(query || {}, values || {}, options || {}, (err, numAffected) => {
            if (err) {
                return reject(err);
            }
            resolve(numAffected);
        })
    });
}

DB.prototype.remove = function(query, options) {
    return new Promise((resolve, reject) => {
        this.db.remove(query || {}, options || {}, (err, numAffected) => {
            if (err) {
                return reject(err);
            }
            resolve(numAffected);
        })
    });
}

module.exports = (database) => {
    return new DB(database);
}

test.js

const db = require('./libs/nedb')('testdb');

(async function() {

	await db.insert({number: 12});
	await db.insert({number: 11});
	await db.insert({number: 13});

	let res = await db.sort({number: -1}).limit(0, 2).find();
	console.log(res);

})();

执行命令

nodemon test.js

转载于:https://my.oschina.net/qiongtaoli/blog/994078

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值