通過(guò)Nodejs操作MongoDB
安裝MongoDB
Install MongoDB Driver
npm install mongodb
引入MongoDB Driver
var mongo = require('mongodb');
通過(guò)Nodejs創(chuàng)建MongoDB數(shù)據(jù)庫(kù)
1.創(chuàng)建Demo文件:touch createMongodbDemo.js
2.在文件中寫(xiě)入:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/mydb";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
console.log("Database created!");
db.close();
});
3.運(yùn)行該文件:node createMongodbDemo.js
可以在控制臺(tái)看到:

4.注意,此時(shí)如果在連接了mongo之后,控制臺(tái)運(yùn)行show databases是看不到創(chuàng)建的mydb這個(gè)數(shù)據(jù)庫(kù)的,因?yàn)樵摂?shù)據(jù)庫(kù)里沒(méi)有collections,目前只能看到admin和local兩個(gè)數(shù)據(jù)庫(kù)
通過(guò)Nodejs創(chuàng)建Collection
1.將createMongodbDemo.js中的代碼改寫(xiě)如下,使用db.createCollection來(lái)創(chuàng)建collection:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/mydb";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
db.createCollection("customers", function(err, res) {
if (err) throw err;
console.log("Collection created");
db.close();
})
})
2.運(yùn)行該文件:node createMongodbDemo.js

3.驗(yàn)證是否創(chuàng)建成功了:
進(jìn)入mongo:
mongo-
顯示數(shù)據(jù)庫(kù):
show databases
image.png
說(shuō)明之前的mydb數(shù)據(jù)庫(kù)成功創(chuàng)建了 進(jìn)入
mydb數(shù)據(jù)庫(kù):use mydb-
顯示collections:
show collections
image.png
說(shuō)明collection創(chuàng)建成功
插入一條數(shù)據(jù)
1.將代碼改寫(xiě)如下,通過(guò)insertOne方法進(jìn)行插入:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/mydb";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var myObj = {
name: 'wilson',
age: 22
}
db.collection("customers").insertOne(myObj, function(err, res) {
if (err) throw err;
console.log("Insert successfully");
db.close();
})
})
2.運(yùn)行代碼
3.切換到mydb數(shù)據(jù)庫(kù): use mydb
4.查詢(xún)customers collection中是否插入成功: db.customers.find().pretty()

插入多條數(shù)據(jù)
1.將代碼改寫(xiě)如下,通過(guò)insertMany方法進(jìn)行插入:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/mydb";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var myObjs = [
{
name: 'wilson',
age: 22
},
{
name: 'kathy',
age: 21
},
{
name: 'curry',
age: 28
}
]
db.collection("customers").insertMany(myObjs, function(err, res) {
if (err) throw err;
console.log("Insert successfully");
db.close();
})
})
2.運(yùn)行代碼
3.查詢(xún)customers collection中是否插入成功: db.customers.find().pretty()
查詢(xún)一條數(shù)據(jù)
1.將代碼改寫(xiě)如下,通過(guò)findOne方法來(lái)進(jìn)行查找:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/mydb";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
db.collection("customers").findOne({"name": "kathy"}, function(err, res) {
if (err) throw err;
console.log(res.age);
db.close();
})
})
輸出了找到的那條記錄的age。
查詢(xún)多條數(shù)據(jù)
1.將代碼改寫(xiě)如下,通過(guò)find方法來(lái)進(jìn)行查找:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/mydb";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
db.collection("customers").find({}).toArray(function(err, res) {
if (err) throw err;
console.log(res);
db.close();
})
})
當(dāng)查詢(xún)條件為空時(shí),會(huì)得到所有的記錄。

2.如果我希望只顯示某些字段該如何處理?比如我不想顯示_id。
通過(guò)find方法的第二個(gè)參數(shù)來(lái)設(shè)置顯示的字段,將上面的代碼改寫(xiě)為:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/mydb";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
db.collection("customers").find({}, {"_id": false}).toArray(function(err, res) {
if (err) throw err;
console.log(res);
db.close();
})
})
這里{"_id": false}就可以不返回_id字段。

對(duì)查詢(xún)到的數(shù)據(jù)進(jìn)行排序
1.將代碼改寫(xiě)如下,通過(guò)sort方法來(lái)進(jìn)行排序:
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/mydb";
MongoClient.connect(url, function(err, db) {
if (err) throw err;
var mySort = { age: 1 };
db.collection("customers").find().sort(mySort).toArray(function(err, res) {
if (err) throw err;
console.log(res);
db.close();
})
})
var mySort = { age: 1 };表示按照age字段的升序進(jìn)行排序。如果希望降序進(jìn)行排序,只需要將1改成-1。

