node.JS下利用mongdb进行数据库操作

jopen 10年前

nodeJS下使用mongodb实现对数据库的增删改查。

需要引用的node_modules

npm  install mongodb

此处引用的mongodb模块版本为1.4.12

一.初始化mongdb.

var mongodb = require('mongodb');    var MongoClient = require('mongodb').MongoClient;  var db;  var util = require('util');    // Initialize connection once  MongoClient.connect("mongodb://localhost:27017/threepigs", function(err, database) {      if(err) throw err;          db = database;  });

首先引用mongodb模块,然后获得MongoClient对象。

从MongoClient对象中调用connect方法获取数据库连接。注意connect方法会默认创建出含有五个数据库连接的连接吃。

二.CRUD操作.

所有操作中参数的数据格式均为BSON格式。

1.查询语句

db.collection(tableName).find({'XXXX': xxxx},{sort: {'XXXX': 1}}).toArray(function(err, docs) {              if (err) throw err;              return ;          });

使用find函数查看某一文档内容,find()第一个参数为查询参数,第二个参数为对结果集操作

2.插入语句

db.collection(tableName).insert( {'XXXX': xxxx}, {w:1}, function(err, objects) {                  if (err) throw err;                  });

使用insert函数插入一个文档,insert()第一个参数为插入的数据。

3.更新操作

db.collection(tableName).update({'XXXX': xxxx}, {$set: {'XXXX': xxxx}}, {w:1,upsert:true}, function(err) {                      if (err) console.warn(err.message);                  });

使用update函数更新一个文档,update()第一个参数为更新的数据,set参数查询被更新的文档。 upsert:true标记,如果set参数未查询到相应文档则新建一个。

4.删除操作

db.collection(tableName).remove( {'XXXX': xxxx} ,{w: 1}, function(err, docs) {                              if (err) throw err;                          });

使用remove()方法移除文档,remove()第一个参数为要移除文档的指定条件。

三.注意

因为nodeJS是异步的。所以在对数据库操作的时候,如果需要将上一步得到的结果传递给下一个操作那么就需要对这些操作做一定的处理单纯

db.collection(tableName).update({'XXXX': xxxx}, {$set: {'XXXX': xxxx}}, {w:1,upsert:true}, function(err) {                      if (err) console.warn(err.message);                  });    db.collection(tableName).remove( {'XXXX': xxxx} ,{w: 1}, function(err, docs) {                              if (err) throw err;                          });

这样的并列操作是会出现问题的,因为上一步的操作的结果还没返回,nodeJS就已经进行到了下一步。

解决方法。

嵌套语句

db.collection(tableName).update({'XXXX': xxxx}, {$set: {'XXXX': xxxx}}, {w:1,upsert:true}, function(err) {                      if (err) console.warn(err.message);                                                                db.collection(tableName).remove( {'XXXX': xxxx} ,{w: 1}, function(err, docs) {                                                  if (err) throw err;                                              });                  });

将下一步需要进行的操作放到上一步的回调函数中,保证其按顺序执行,但是当需要嵌套的数目非常大时,就会非常的麻烦。

来自:http://my.oschina.net/kakakaka/blog/337860