一个简单的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();
});
});
});
代码已经托管在码云