这里有新鲜出炉的 Node.js 教程,程序狗速度看过来!
Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的 易于扩展的网络应用 · Node.js 借助事件驱动, 非阻塞 I/O 模型变得轻量和高效, 非常适合 运行在分布式设备 的 数据密集型 的实时应用
本篇文章主要介绍了 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 即新元素覆盖了旧元素
来源: http://www.phperz.com/article/17/0512/328989.html