node.JS下利用mongdb進行數據庫操作

jopen 10年前發布 | 14K 次閱讀 Node.js 開發 Node.js

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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!