安装mongodb模块 npm install --save mongodb
数据库连接
var MongoClient = require('mongodb').MongoClient; var assert = require('assert'); //连接test数据库 var url = 'mongodb://localhost:27017/test'; MongoClient.connect(url, (err,db) => { assert.equal(null,err); console.log('连接成功'); db.close(); });
插入数据
插入一个文档对象
var MongoClient = require('mongodb').MongoClient; var assert = require('assert'); //test数据库的路径 var url = 'mongodb://localhost:27017/test'; //插入文档 var insertDocument = (db,callback) => { //在test库下blog集合中 新增json文档 db.collection('blog').insertOne({ name:"xiaos", age:22 }, (err, result) => { assert.equal(err,null); console.log('新增文档成功'); callback(); }); }; //插入操作 MongoClient.connect(url, (err,db) => { assert.equal(null,err); insertDocument(db, ()=>{ db.close(); }); });
批量插入操作:insertMany(doc,options,callback)(如果没有callback函数,本身返回一个Promise对象)
简单的insertMany操作
var MongoClient = require('mongodb').MongoClient, test = require('assert'); MongoClient.connect('mongodb://localhost:27017/test',(err, db) => { var blog = db.collection('blog'); //新增两个文档对象 blog.insertMany([{name:"shen"},{name:"fzq"}],(err,r) => { test.equal(null,err); //回调函数中返回的r为执行完插入操作的对象,insertedCount属性为已经插入的对象个数 test.equal(2,r.insertedCount); db.close(); }); });
使用Promise的批量插入操作!
var MongoClient = require('mongodb').MongoClient, test = require('assert'); MongoClient.connect('mongodb://localhost:27017/test', (err,db) => { var blog = db.collection('blog'); blog.insertMany([{name:"xiaosGG"},{name:"fzqDD"}]).then((r) => { test.equal(2,r.insertedCount); db.close(); }); });
因为mongodb和nodejs都是异步io的机制,所有几乎所有耗时的操作都是以回调函数的方式完成。但是因为回调函数的层次嵌套,一段代码后面可能会跟上一大段的 });,随着层级的增加,代码变得不易理解和维护。所有在使用MongoDB时,推荐用Promise的方式来解决回调嵌套的问题。
从上面的代码可以看出,insertMany([obj...])返回一个Promise对象,我们用.then((r)=>{})接收正常的回调值,用.catch((err) => {})来抓取异常。
使用生成器(Generator)的批量插入操作
var MongoClient = require('mongodb').MongoClient, test = require('assert'), co = require('co'); co(function*(){ var db = yield MongoClient.connect('mongodb://localhost:27017/test'); var blog = db.collection('blog'); var r = yield blog.insertMany([{name:"xiaosBB"},{name:"fzqMM"}]); test.equal(2,r.insertedCount); db.close(); });
单个文档插入:insertOne(doc,options,callback)(如果没有callback函数,本身返回一个Promise对象)
简单的插入操作
var MongoClient = require('mongodb').MongoClient, test = require('assert'); MongoClient.connect('mongodb://localhost:27017/test',(err,db)=>{ var blog = db.collection('blog'); blog.insertOne({name:"xiaos"},(err,r) => { test.equal(null,err); test.equal(1,r.insertedCount); db.close(); }); });
使用Promise的插入操作
var MongoClient = require('mongodb').MongoClient, test = require('assert'); MongoClient.connect('mongodb://localhost:27017/test',(err,db)=>{ var blog = db.collection('blog'); blog.insertOne({name:"xiaos"}).then((r)=>{ test.equal(1,r.insertedCount); db.close(); }); });
使用生成器的插入操作
var MongoClient = require('mongodb').MongoClient, test = require('assert'), co = require('co'); co(function*(){ var db = yield MongoClient.connect('mongodb://localhost:27017/test'); var blog = db.collection('blog'); var r = yield blog.insertOne({name:"xiaosBB"}); test.equal(1,r.insertedCount); db.close(); });
mapReduce(map,reduce,options,callback) return Promise if no callback
var MongoClient = require('mongodb').MongoClient, test = require('assert'); MongoClient.connect()
isCapped(callback) return Promise if no callback
var MongoClient = require('mongodb').MongoClient, test = require('assert'); MongoClient.connect('mongodb://localhost:27017/test',(err,db) => { db.createCollection('newBlog',{'capped':true,'size':1024},(err,collection) => { test.equal('newBlog',collection.collectionName); collection.isCapped((err,capped) => { test.equal(true,capped); db.close(); }); }); });
capped collection是指固定大小的集合,新元素插入后会覆盖掉旧的元素,保持整个集合的大小不变。
//在命令行中输入mongo //创建一个1024大小的myCappedCollection集合 db.createCollection('myCappedCollection',{'capped':true,'size':1024}); //插入1000条记录 for (var i = 1;i <= 1000;i++){ db.myCappedCollection.save({id:i,name:'xiaos'+i}); } //查询文档个数 db.myCappedCollection.count() //实际只有18个文档id为983-1000 即新元素覆盖了旧元素
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
- 【雨果唱片】中国管弦乐《鹿回头》WAV
- APM亚流新世代《一起冒险》[FLAC/分轨][106.77MB]
- 崔健《飞狗》律冻文化[WAV+CUE][1.1G]
- 罗志祥《舞状元 (Explicit)》[320K/MP3][66.77MB]
- 尤雅.1997-幽雅精粹2CD【南方】【WAV+CUE】
- 张惠妹.2007-STAR(引进版)【EMI百代】【WAV+CUE】
- 群星.2008-LOVE情歌集VOL.8【正东】【WAV+CUE】
- 罗志祥《舞状元 (Explicit)》[FLAC/分轨][360.76MB]
- Tank《我不伟大,至少我能改变我。》[320K/MP3][160.41MB]
- Tank《我不伟大,至少我能改变我。》[FLAC/分轨][236.89MB]
- CD圣经推荐-夏韶声《谙2》SACD-ISO
- 钟镇涛-《百分百钟镇涛》首批限量版SACD-ISO
- 群星《继续微笑致敬许冠杰》[低速原抓WAV+CUE]
- 潘秀琼.2003-国语难忘金曲珍藏集【皇星全音】【WAV+CUE】
- 林东松.1997-2039玫瑰事件【宝丽金】【WAV+CUE】