Node.js的Mongodb使用实例


Posted in Javascript onDecember 30, 2016

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

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

Javascript 相关文章推荐
javascript调试说明
Jun 07 Javascript
javascript 词法作用域和闭包分析说明
Aug 12 Javascript
ASP中Sub和Function的区别说明
Aug 30 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
Apr 16 Javascript
实例代码详解jquery.slides.js
Nov 16 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
Nov 29 Javascript
ArtEditor富文本编辑器增加表单提交功能
Apr 18 Javascript
动态统计当前输入内容的字节、字符数的实例详解
Oct 27 Javascript
深入理解Node module模块
Mar 26 Javascript
Vue中使用ElementUI使用第三方图标库iconfont的示例
Oct 11 Javascript
如何制作一个Node命令行图像识别工具
Dec 12 Javascript
浅谈laytpl 模板空值显示null的解决方法及简单的js表达式
Sep 19 Javascript
jQuery实现的仿百度,仿谷歌搜索下拉框效果示例
Dec 30 #Javascript
原生JS实现图片左右轮播
Dec 30 #Javascript
零基础轻松学JavaScript闭包
Dec 30 #Javascript
Html5+jQuery+CSS制作相册小记录
Dec 30 #Javascript
Chrome浏览器的alert弹窗禁止再次弹出后恢复的方法
Dec 30 #Javascript
bootstrap表格分页实例讲解
Dec 30 #Javascript
js中数组的常用方法小结
Dec 30 #Javascript
You might like
PHP array_multisort() 函数的深入解析
2013/06/20 PHP
thinkphp中字符截取函数msubstr()用法分析
2016/01/09 PHP
html数组字符串拼接的最快方法
2009/09/16 Javascript
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
2012/02/27 Javascript
jquery插件制作 表单验证实现代码
2012/08/17 Javascript
JavaScript网页定位详解
2014/01/13 Javascript
javascript实现五星评价代码(源码下载)
2015/08/11 Javascript
使用Sticky组件实现带sticky效果的tab导航和滚动导航的方法
2016/03/22 Javascript
详解JavaScript表单验证(E-mail 验证)
2016/03/31 Javascript
jQuery实现动态添加tr到table的方法
2016/12/26 Javascript
使用Bootstrap + Vue.js实现添加删除数据示例
2017/02/27 Javascript
微信小程序 支付后台java实现实例
2017/05/09 Javascript
js时间戳与日期格式之间相互转换
2017/12/11 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
2019/06/10 Javascript
vue下的@change事件的实现
2019/10/25 Javascript
Vue中jsx不完全应用指南小结
2019/11/01 Javascript
微信小程序图片加载失败时替换为默认图片的方法
2019/12/09 Javascript
js抽奖转盘实现方法分析
2020/05/16 Javascript
vue制作toast组件npm包示例代码
2020/10/29 Javascript
Python实现获取网站PR及百度权重
2015/01/21 Python
Python读大数据txt
2016/03/28 Python
Python字典数据对象拆分的简单实现方法
2017/12/05 Python
numpy排序与集合运算用法示例
2017/12/15 Python
Python2.7下安装Scrapy框架步骤教程
2017/12/22 Python
Python实现的根据文件名查找数据文件功能示例
2018/05/02 Python
python保存二维数组到txt文件中的方法
2018/11/15 Python
python matplotlib饼状图参数及用法解析
2019/11/04 Python
Python使用monkey.patch_all()解决协程阻塞问题
2020/04/15 Python
python:HDF和CSV存储优劣对比分析
2020/06/08 Python
俄罗斯香水和化妆品网上商店:NOTINO.ru
2019/12/17 全球购物
高中自我鉴定
2013/12/20 职场文书
见习期自我鉴定
2014/01/31 职场文书
20年同学聚会邀请函
2014/02/04 职场文书
超市理货员岗位职责
2014/07/04 职场文书
欧也妮葛朗台读书笔记
2015/06/30 职场文书
Python实现照片卡通化
2021/12/06 Python