如果是使用mongodb与node.js配合使用,这推荐安装monk模块,不管是koa 2还是express 4.x都推荐使用。
详细文档:https://automattic.github.io/monk/docs/GETTING_STARTED.html
安装:
npm install --save monk
调用:
const monk = require('monk'); const url = 'localhost:27017/xgllseo'; const db = monk(url);
创建唯一索引自动递增:
先执行创建一个集合专门用来存储自增数字
db.createCollection("counters") db.counters.insert({_id:"productid",sequence_value:1})
批量插入数据的同时,递增索引
const collection = db.get('admin'); //admin是集合,根据需求修改成自己的集合 db.get('counters').find({}).then((docs) => { //1,先查询当前最新的自增数值是多少 var _id=docs[0].sequence_value; function autoadd() { return ++_id; //2,当前最新的自增数,每次都累加1 } collection.insert([ {"_id":autoadd(),user: ctx.request.body.user,pass: ctx.request.body.pass}, //3,每插入一条数据,索引就累加1了 {"_id":autoadd(),user:'a123',pass:'456'}, {"_id":autoadd(),user:'b123',pass:'456'}, {"_id":autoadd(),user:'c123',pass:'456'}, {"_id":autoadd(),user:'d123',pass:'456'}] ).then((doc)=>{ obj.aa=doc; //4,插入的数据结束后,更新下存储的自增数的集合,方便下次插入数据时,接着最新的索引。 db.get('counters').findOneAndUpdate({sequence_value: (doc[0]["_id"])-1}, {sequence_value: doc[doc.length-1]["_id"]}).then(()=>{a();}) }); });
—————————————————————
增
//为了集合添加一条文档 db.get('集合').insert([ { "_id":autoadd(), //也可以执行函数 post_title: filter.html2Escape(ctx.request.body.post_title), post_con: ctx.request.body.post_con, category:ctx.request.body.category, time:moment().format('YYYY-MM-DD kk:mm:ss') } ]) //同时添加多个文档 db.get('集合').insert([{ woot: 'bar' }, { woot: 'baz' }])
删
db.get('集合').remove() //删除某集合下里面的所有文档 db.get('集合').remove({"_id":1}); //根据条件删除_id=1的文档
改
db.get('集合').update({name: '123'}, {$set :{num:456}}) //找到集合下含name=123的一个条文档,修改它字段num值为456
db.get('集合').update( { type : "book" }, { $inc : { qty : 1 } }, //$inc是数字累加 { multi: true } ) //找到集合里面所有type=book的文档,让各自的文档中qty的字段累加1
查
db.get('集合').find({}).then((doc)=>{}) //获取到集合的所有文档 db.get('集合').find({"_id":1}).then((doc)=>{}) //只获取指定id的文档 //模糊搜索,搜索集合中的post_title字段或者post_con字段,若含有指定关键词,就选取出来相应的文档 db.get('集合').find({$or:[{"post_title":new RegExp(ctx.query['search[value]'],'ig')},{"post_con": new RegExp(ctx.query['search[value]'],'ig')}]}) //模糊搜索,搜索post集合,在集合的字段post_title或者post_con字段中如果含有value关键词,就选出所有符合条件的数据, 并且以字段_id的为准降序排列(数字大到小),忽略前10条数据,从第11条数据开始,只显示5条数据,每条数据不显示post_con字段。 db.get('post').find({$or:[{"post_title":new RegExp(ctx.query['search[value]'],'ig')},{"post_con": new RegExp(ctx.query['search[value]'],'ig')}]}, { fields: { post_con: 0 }, sort: {"_id": -1}, limit: 5, skip: 10 }) db.get('集合').count() //条数 db.get('集合').count({name: 'foo'}) //返回字段name的值是foo的所有文档条数 findOne() //不管数据多少,只显示一条数据 findOneAndDelete() //不管数据多少,只找到一条数据并删除 findOneAndUpdate()
关闭与数据库连接
db.close()