全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Node.js的Mongodb使用实例

安装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 即新元素覆盖了旧元素

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# nodejs使用mongodb  # nodejs  # mongodb  # nodejs中使用mongodb  # nodejs连接mongodb数据库实现增删改查  # NodeJS中的MongoDB快速入门详细教程  # NodeJS连接MongoDB数据库时报错的快速解决方法  # NodeJS学习笔记之MongoDB模块  # nodejs中使用monk访问mongodb  # 文档  # 回调  # 如果没有  # 都是  # 是指  # 上一  # 可以看出  # 后会  # 几乎所有  # 创建一个  # 命令行  # 大家多多  # 会跟  # 大段  # log  # console  # close  # equal  # gt  # db 


相关文章: 香港服务器网站卡顿?如何解决网络延迟与负载问题?  建站之星3.0如何解决常见操作问题?  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  C#如何序列化对象为XML XmlSerializer用法  如何自定义建站之星模板颜色并下载新样式?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  网站制作公司广州有几家,广州尚艺美发学校网站是多少?  制作农业网站的软件,比较好的农业网站推荐一下?  建站主机解析:虚拟主机配置与服务器选择指南  广德云建站网站建设方案与建站流程优化指南  宁波免费建站如何选择可靠模板与平台?  如何撰写建站申请书?关键要点有哪些?  建站VPS推荐:2025年高性能服务器配置指南  如何通过FTP服务器快速搭建网站?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  全景视频制作网站有哪些,全景图怎么做成网页?  建站之星客服服务时间及联系方式如何?  建站之星Pro快速搭建教程:模板选择与功能配置指南  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  ,南京靠谱的征婚网站?  如何在西部数码注册域名并快速搭建网站?  建站之星如何一键生成手机站?  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  如何用低价快速搭建高质量网站?  建站之星如何快速解决建站难题?  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  如何通过远程VPS快速搭建个人网站?  制作网站哪家好,cc、.co、.cm哪个域名更适合做网站?  如何批量查询域名的建站时间记录?  网站制作大概多少钱一个,做一个平台网站大概多少钱?  ,怎么用自己头像做动态表情包?  如何规划企业建站流程的关键步骤?  如何选择高效响应式自助建站源码系统?  制作门户网站的参考文献在哪,小说网站怎么建立?  ,网页ppt怎么弄成自己的ppt?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  如何在建站主机中优化服务器配置?  活动邀请函制作网站有哪些,活动邀请函文案?  C#怎么创建控制台应用 C# Console App项目创建方法  合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?  网站制作软件免费下载安装,有哪些免费下载的软件网站?  公众号网站制作网页,微信公众号怎么制作?  非常酷的网站设计制作软件,酷培ai教育官方网站?  已有域名和空间,如何快速搭建网站?  如何在IIS7中新建站点?详细步骤解析  整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?  如何设置并定期更换建站之星安全管理员密码?  三星网站视频制作教程下载,三星w23网页如何全屏?  免费制作小说封面的网站有哪些,怎么接网站批量的封面单?  Swift开发中switch语句值绑定模式 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。