如果是使用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()