您的当前位置:首页正文

使用Nodejs连接mongodb数据库的实现

2020-11-27 来源:汇意旅游网

这篇文章主要介绍了使用Nodejs连接mongodb数据库的实现代码,需要的朋友可以参考下

一个简单的nodejs连接mongodb示例,来自 mongodb官方示例

1. 创建package.json

首先,创建我们的工程目录connect-mongodb,并作为我们的当前目录

mkdir connect-mongodb
cd connect-mongodb

输入npm init命令创建package.json

npm init

然后,安装mongodb的nodejs版本driver

npm install mongodb --save

mongodb驱动包将会安装到当前目录下的node_modules中

2. 启动MongoDB服务器

安装MongoDB并启动MongoDB数据库服务,可参考我之前的文章,或者MongoDB官方文档

3. 连接MongoDB

创建一个app.js文件,并添加以下代码来连接服务器地址为192.168.0.243,mongodb端口为27017上名称为myNewDatabase的数据库

var MongoClient = require('mongodb').MongoClient,
 assert = require('assert');
// Connection URL
var url = 'mongodb://192.168.0.243:27017/myNewDatabase';
MongoClient.connect(url,function(err,db){
 assert.equal(null,err);
 console.log("Connection successfully to server");
 db.close();
});

在命令行输入以下命令运行app.js

node app.js

4. 插入文档

在app.js中添加以下代码,使用insertMany方法添加3个文档到documents集合中

var insertDocuments = function(db, callback){
 // get ths documents collection
 var collection = db.collection('documents');
 // insert some documents
 collection.insertMany([
 {a:1},{a:2},{a:3}
 ],function(err,result){
 assert.equal(err,null);
 assert.equal(3,result.result.n);
 assert.equal(3,result.ops.length);
 console.log("Inserted 3 documents into the collection");
 callback(result);
 });
};

insert命令返回一个包含以下属性的对象:

  • result MongoDB返回的文档结果

  • ops 添加了_id字段的文档

  • connection 执行插入操作所使用的connection

  • 在app.js更新以下代码调用insertDocuments方法

    var MongoClient = require('mongodb').MongoClient
     , assert = require('assert');
    // Connection URL
    var url = 'mongodb://localhost:27017/myproject';
    // Use connect method to connect to the server
    MongoClient.connect(url, function(err, db) {
     assert.equal(null, err);
     console.log("Connected successfully to server");
     insertDocuments(db, function() {
     db.close();
     });
    });

    在命令行中使用node app.js运行

    5. 查询所有文档

    添加findDocuments函数

    var findDocuments = function(db,callback){
     // get the documents collection
     var collection = db.collection('documents');
     // find some documents
     collection.find({}).toArray(function(err,docs){
     assert.equal(err,null);
     console.log("Found the following records");
     console.log(docs);
     callback(docs);
     });
    };

    findDocuments函数查询了所有'documents'集合中所有的文档,将此函数添加到MongoClient.connect的回调函数中

    var MongoClient = require('mongodb').MongoClient
     , assert = require('assert');
    // Connection URL
    var url = 'mongodb://localhost:27017/myproject';
    // Use connect method to connect to the server
    MongoClient.connect(url, function(err, db) {
     assert.equal(null, err);
     console.log("Connected correctly to server");
     insertDocuments(db, function() {
     findDocuments(db, function() {
     db.close();
     });
     });
    });

    6. 使用过滤条件(query filter)查询文档

    查询'a':3的文档

    var findDocuments = function(db, callback) {
     // Get the documents collection
     var collection = db.collection('documents');
     // Find some documents
     collection.find({'a': 3}).toArray(function(err, docs) {
     assert.equal(err, null);
     console.log("Found the following records");
     console.log(docs);
     callback(docs);
     }); 
    }

    7. 更新文档

    var updateDocument = function(db,callback){
     // get the documents collection
     var collection = db.collection('documents');
     // update document where a is 2, set b equal to 1
     collection.updateOne({a:2},{
     $set:{b:1}
     },function(err,result){
     assert.equal(err,null);
     assert.equal(1,result.result.n);
     console.log("updated the document with the field a equal to 2");
     callback(result);
     });
    };

    updateDocument方法更新满足条件a为2的第一个文档,新增一个b属性,并将其设置为1。

    将updateDocument方法添加到MongoClient.connect方法的回调中

    MongoClient.connect(url,function(err,db){
     assert.equal(null,err);
     console.log("Connection successfully to server");
     insertDocuments(db,function(){
     updateDocument(db,function(){
     db.close();
     });
     });
    });

    8. 删除文档

    var removeDocument = function(db,callback){
     // get the documents collection
     var collection = db.collection('documents');
     // remove some documents
     collection.deleteOne({a:3},function(err,result){
     assert.equal(err,null);
     assert.equal(1,result.result.n);
     console.log("removed the document with the field a equal to 3");
     callback(result);
     });
    };

    添加到app.js中

    var MongoClient = require('mongodb').MongoClient
     , assert = require('assert');
    // Connection URL
    var url = 'mongodb://localhost:27017/myproject';
    // Use connect method to connect to the server
    MongoClient.connect(url, function(err, db) {
     assert.equal(null, err);
     console.log("Connected successfully to server");
     insertDocuments(db, function() {
     updateDocument(db, function() {
     removeDocument(db, function() {
     db.close();
     });
     });
     });
    });

    9. 创建索引

    索引能够改善应用的性能。下面你代码在'a'属性上添加索引

    var indexCollection = function(db,callback){
     db.collection('documents').createIndex({
     a:1
     },null,function(err,results){
     console.log(results);
     callback();
     });
    };

    更新app.js

    MongoClient.connect(url,function(err,db){
     assert.equal(null,err);
     console.log("Connection successfully to server");
     insertDocuments(db,function(){
     indexCollection(db,function(){
     db.close();
     });
     });
    });
    显示全文