推荐:koa2与mongodb交互

2017-4-10    分类: koa

如果是使用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: '旧数据'}, {name: '新数据'})

 

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()