J.J. Huang   2020-02-13   Node.js   瀏覽次數:次  

Node.js | MongoDB 連接

📑 目錄
  1. 環境準備
  2. 安裝 MongoDB 驅動
  3. 連接資料庫
  4. 建立集合
  5. 資料庫操作 (CURD)
    1. 插入資料
    2. 插入多筆資料
    3. 查詢資料
    4. 更新資料
    5. 更新多筆資料
    6. 刪除資料
    7. 刪除多筆資料
    8. 刪除集合
    9. 排序
  6. 查詢分頁
  7. 補充

環境準備

MongoDB的安裝可以參閱Docker - 第十一章 | 安裝MongoDB

  • 顯示目前的資料庫清單:
1
2
3
4
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB

安裝 MongoDB 驅動

要使用Node.js訪問MongoDB資料庫,你需要一個MongoDB驅動程序。

1
npm install mongodb --save

Node.js - 圖 1 (01)​‌‌​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌​​‌​‌‌​‌​‌​​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌‌​​‌‌​​‌​

連接資料庫

要在MongoDB中建立一個資料庫,首先我們需要建立一個MongoClient對象,然後配置好指定的URL和端口號。

如果資料庫不存在,MongoDB將建立資料庫並建立連接。

1
2
3
4
5
6
7
8
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/jjtest";
 
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
  if (err) throw err;
  console.log("資料庫已建立!");
  db.close();
});

執行結果如下:​‌‌​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌​​‌​‌‌​‌​‌​​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌‌​​‌‌​​‌​

1
2
3
$ node test.js
(node:4753) DeprecationWarning: current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.
資料庫已建立!

Node.js - 圖 2 (02)

建立集合

使用createCollection()方法來建立集合:

1
2
3
4
5
6
7
8
9
10
11
12
13
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/jjtest";
 
MongoClient.connect(url, { useNewUrlParser: true }, function (err, db) {
    if (err) throw err;
    console.log('資料庫已建立');
    var dbase = db.db("jjtest");
    dbase.createCollection('site', function (err, res) {
        if (err) throw err;
        console.log("建立集合!");
        db.close();
    });
});

執行結果如下:​‌‌​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌​​‌​‌‌​‌​‌​​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌‌​​‌‌​​‌​

1
2
3
4
$ node test.js
(node:4861) DeprecationWarning: current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.
資料庫已建立
建立集合!

Node.js - 圖 3 (03)

資料庫操作 (CURD)

MySQL不同的是MongoDB會自動建立資料庫和集合,所以使用前我們不需要手動去建立。

插入資料

1
2
3
4
5
6
7
8
9
10
11
12
13
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/jjtest";
 
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
if (err) throw err;
var dbo = db.db("jjtest");
var myobj = { name: "J.J.'s blogs", url: "morosedog.gitlab.io" };
dbo.collection("site").insertOne(myobj, function(err, res) {
if (err) throw err;
console.log("資料插入成功");
db.close();
});
});

執行結果如下:​‌‌​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌​​‌​‌‌​‌​‌​​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌‌​​‌‌​​‌​

1
2
3
$ node test.js
(node:4872) DeprecationWarning: current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.
資料插入成功

MongoDB客戶端:

1
2
3
4
5
6
7
8
9
10
11
12
> show dbs
admin 0.000GB
config 0.000GB
jjtest 0.000GB
local 0.000GB
> use jjtest
switched to db jjtest
> show tables
site
> db.site.find()
{ "_id" : ObjectId("5e44ef0cda14ed1308971ca7"), "name" : "J.J.'s blogs", "url" : "morosedog.gitlab.io" }
>

Node.js - 圖 4 (04)

插入多筆資料

插入多條資料可以使用insertMany()。​‌‌​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌​​‌​‌‌​‌​‌​​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌‌​​‌‌​​‌​

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/jjtest";
 
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
if (err) throw err;
var dbo = db.db("jjtest");
var myobj = [
{ name: "J.J.'s blogs", url: "morosedog.gitlab.io" },
{ name: 'Google', url: 'https://www.google.com'},
{ name: 'Facebook', url: 'https://zh-tw.facebook.com'}
];
dbo.collection("site").insertMany(myobj, function(err, res) {
if (err) throw err;
console.log("插入的資料數量為: " + res.insertedCount);
db.close();
});
});

執行結果如下:

1
2
3
$ node test.js
(node:4977) DeprecationWarning: current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.
插入的資料數量為: 3

MongoDB客戶端:

1
2
3
4
5
6
> use jjtest
switched to db jjtest
> db.site.find()
{ "_id" : ObjectId("5e44f141b5d2871371235873"), "name" : "J.J.'s blogs", "url" : "morosedog.gitlab.io" }
{ "_id" : ObjectId("5e44f141b5d2871371235874"), "name" : "Google", "url" : "https://www.google.com" }
{ "_id" : ObjectId("5e44f141b5d2871371235875"), "name" : "Facebook", "url" : "https://zh-tw.facebook.com" }

Node.js - 圖 5 (05)​‌‌​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌​​‌​‌‌​‌​‌​​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌‌​​‌‌​​‌​

查詢資料

使用find()來查找資料,find()可以返回匹配條件的所有資料。

  • 如果未指定條件,find()返回集合中的所有資料。
1
2
3
4
5
6
7
8
9
10
11
12
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/jjtest";
 
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
    if (err) throw err;
    var dbo = db.db("jjtest");
    dbo.collection("site"). find({}).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
    });
});

執行結果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$ node test.js
(node:4989) DeprecationWarning: current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.
[
{
_id: 5e44f141b5d2871371235873,
name: "J.J.'s blogs",
url: 'morosedog.gitlab.io'
},
{
_id: 5e44f141b5d2871371235874,
name: 'Google',
url: 'https://www.google.com'
},
{
_id: 5e44f141b5d2871371235875,
name: 'Facebook',
url: 'https://zh-tw.facebook.com'
}
]

Node.js - 圖 6 (06)​‌‌​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌​​‌​‌‌​‌​‌​​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌‌​​‌‌​​‌​

  • 查詢條件為”J.J.’s blogs”:
1
2
3
4
5
6
7
8
9
10
11
12
13
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/jjtest";
 
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
    if (err) throw err;
    var dbo = db.db("jjtest");
    var whereStr = {"name":'J.J.\'s blogs'};
    dbo.collection("site").find(whereStr).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
    });
});

執行結果如下:

1
2
3
4
5
6
7
8
9
$ node test.js
(node:5011) DeprecationWarning: current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.
[
{
_id: 5e44f141b5d2871371235873,
name: "J.J.'s blogs",
url: 'morosedog.gitlab.io'
}
]

Node.js - 圖 7 (07)

更新資料

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/jjtest";
 
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
    if (err) throw err;
    var dbo = db.db("jjtest");
    var whereStr = {"name":'J.J.\'s blogs'};
    var updateStr = {$set: { "url" : "https://morosedog.gitlab.io/" }};
    dbo.collection("site").updateOne(whereStr, updateStr, function(err, res) {
        if (err) throw err;
        console.log("資料更新成功");
        db.close();
    });
});

執行結果如下:​‌‌​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌​​‌​‌‌​‌​‌​​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌‌​​‌‌​​‌​

1
2
3
$ node test.js
(node:5028) DeprecationWarning: current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.
資料更新成功

MongoDB客戶端:

1
2
3
4
5
> db.site.find()
{ "_id" : ObjectId("5e44f141b5d2871371235873"), "name" : "J.J.'s blogs", "url" : "https://morosedog.gitlab.io/" }
{ "_id" : ObjectId("5e44f141b5d2871371235874"), "name" : "Google", "url" : "https://www.google.com" }
{ "_id" : ObjectId("5e44f141b5d2871371235875"), "name" : "Facebook", "url" : "https://zh-tw.facebook.com" }
>

Node.js - 圖 8 (08)

更新多筆資料

更新所有符合條件的資料資料可以使用updateMany()。​‌‌​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌​​‌​‌‌​‌​‌​​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌‌​​‌‌​​‌​

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/jjtest";
 
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
    if (err) throw err;
    var dbo = db.db("jjtest");
    var whereStr = {"name":'J.J.\'s blogs'};
    var updateStr = {$set: { "url" : "https://morosedog.gitlab.io/" }};
    dbo.collection("site").updateMany(whereStr, updateStr, function(err, res) {
        if (err) throw err;
         console.log(res.result.nModified + " 條資料被更新");
        db.close();
    });
});

註:更新多筆資料就不特別示範了。

刪除資料

1
2
3
4
5
6
7
8
9
10
11
12
13
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/jjtest";

MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
    if (err) throw err;
    var dbo = db.db("jjtest");
    var whereStr = {"name":'J.J.\'s blogs'};
    dbo.collection("site").deleteOne(whereStr, function(err, obj) {
        if (err) throw err;
        console.log("資料刪除成功");
        db.close();
    });
});

執行結果如下:

1
2
3
$ node test.js
(node:5074) DeprecationWarning: current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.
資料刪除成功

MongoDB客戶端:​‌‌​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌​​‌​‌‌​‌​‌​​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌‌​​‌‌​​‌​

1
2
3
4
5
6
7
8
9
10
11
12
13
> use jjtest
switched to db jjtest
> db.site.find()
{ "_id" : ObjectId("5e44f141b5d2871371235873"), "name" : "J.J.'s blogs", "url" : "https://morosedog.gitlab.io/" }
{ "_id" : ObjectId("5e44f141b5d2871371235874"), "name" : "Google", "url" : "https://www.google.com" }
{ "_id" : ObjectId("5e44f141b5d2871371235875"), "name" : "Facebook", "url" : "https://zh-tw.facebook.com" }
>
>
>
> db.site.find()
{ "_id" : ObjectId("5e44f141b5d2871371235874"), "name" : "Google", "url" : "https://www.google.com" }
{ "_id" : ObjectId("5e44f141b5d2871371235875"), "name" : "Facebook", "url" : "https://zh-tw.facebook.com" }
>

Node.js - 圖 9 (09)

刪除多筆資料

刪除所有符合條件的資料資料可以使用deleteMany()

1
2
3
4
5
6
7
8
9
10
11
12
13
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/jjtest";

MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
    if (err) throw err;
    var dbo = db.db("jjtest");
    var whereStr = {"name":'J.J.\'s blogs'};
    dbo.collection("site").deleteMany(whereStr, function(err, obj) {
        if (err) throw err;
        console.log(obj.result.n + " 條資料被刪除");
        db.close();
    });
});

註:刪除多筆資料就不特別示範了。​‌‌​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌​​‌​‌‌​‌​‌​​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌‌​​‌‌​​‌​

刪除集合

使用drop()方法來刪除集合。

1
2
3
4
5
6
7
8
9
10
11
12
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/jjtest";
 
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
    if (err) throw err;
    var dbo = db.db("jjtest");
    dbo.collection("site").drop(function(err, delOK) {
        if (err) throw err;
        if (delOK) console.log("集合已刪除");
        db.close();
    });
});

執行結果如下:

1
2
3
$ node test.js
(node:5086) DeprecationWarning: current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.
集合已刪除

MongoDB客戶端:​‌‌​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌​​‌​‌‌​‌​‌​​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌‌​​‌‌​​‌​

1
2
3
4
5
6
7
8
> use jjtest
switched to db jjtest
> show tables
site
>
>
> show tables
>

Node.js - 圖 10 (10)

排序

使用sort()方法,該方法接受一個參數,規定是升序(1)還是降序(-1)。

1
2
{ type: 1 } // 按 type 字段升序
{ type: -1 } // 按 type 字段降序
  • 在開始之前,請先準備資料,主要是多了type的資料。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/jjtest";
 
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
if (err) throw err;
var dbo = db.db("jjtest");
var myobj = [
{ name: "J.J.'s blogs", url: "morosedog.gitlab.io", type: 1 },
{ name: 'Google', url: 'https://www.google.com', type: 2},
{ name: 'Facebook', url: 'https://zh-tw.facebook.com', type: 3}
];
dbo.collection("site").insertMany(myobj, function(err, res) {
if (err) throw err;
console.log("插入的資料數量為: " + res.insertedCount);
db.close();
});
});

MongoDB客戶端:​‌‌​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌​​‌​‌‌​‌​‌​​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌‌​​‌‌​​‌​

1
2
3
4
5
6
7
> use jjtest
switched to db jjtest
> db.site.find()
{ "_id" : ObjectId("5e44f9b0e8a4cb13e7650b40"), "name" : "J.J.'s blogs", "url" : "morosedog.gitlab.io", "type" : 1 }
{ "_id" : ObjectId("5e44f9b0e8a4cb13e7650b41"), "name" : "Google", "url" : "https://www.google.com", "type" : 2 }
{ "_id" : ObjectId("5e44f9b0e8a4cb13e7650b42"), "name" : "Facebook", "url" : "https://zh-tw.facebook.com", "type" : 3 }
>
  • type升序排列。
1
2
3
4
5
6
7
8
9
10
11
12
13
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/jjtest";
 
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
if (err) throw err;
var dbo = db.db("jjtest");
var mysort = { type: 1 };
dbo.collection("site").find().sort(mysort).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});

執行結果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ node test.js
(node:5121) DeprecationWarning: current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.
[
{
_id: 5e44f9b0e8a4cb13e7650b40,
name: "J.J.'s blogs",
url: 'morosedog.gitlab.io',
type: 1
},
{
_id: 5e44f9b0e8a4cb13e7650b41,
name: 'Google',
url: 'https://www.google.com',
type: 2
},
{
_id: 5e44f9b0e8a4cb13e7650b42,
name: 'Facebook',
url: 'https://zh-tw.facebook.com',
type: 3
}
]
  • type降序排列。
1
2
3
4
5
6
7
8
9
10
11
12
13
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/jjtest";
 
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
if (err) throw err;
var dbo = db.db("jjtest");
var mysort = { type: -1 };
dbo.collection("site").find().sort(mysort).toArray(function(err, result) {
if (err) throw err;
console.log(result);
db.close();
});
});

執行結果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ node test.js
(node:5126) DeprecationWarning: current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.
[
{
_id: 5e44f9b0e8a4cb13e7650b42,
name: 'Facebook',
url: 'https://zh-tw.facebook.com',
type: 3
},
{
_id: 5e44f9b0e8a4cb13e7650b41,
name: 'Google',
url: 'https://www.google.com',
type: 2
},
{
_id: 5e44f9b0e8a4cb13e7650b40,
name: "J.J.'s blogs",
url: 'morosedog.gitlab.io',
type: 1
}
]

Node.js - 圖 11 (11)​‌‌​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌​​‌​‌‌​‌​‌​​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌‌​​‌‌​​‌​

查詢分頁

  • 使用limit()方法,該方法只接受一個參數,指定了返回的條數。
1
2
3
4
5
6
7
8
9
10
11
12
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/jjtest";
 
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
    if (err) throw err;
    var dbo = db.db("jjtest");
    dbo.collection("site").find().limit(2).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
  });
});

執行結果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ node test.js
(node:5172) DeprecationWarning: current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.
[
{
_id: 5e44f9b0e8a4cb13e7650b40,
name: "J.J.'s blogs",
url: 'morosedog.gitlab.io',
type: 1
},
{
_id: 5e44f9b0e8a4cb13e7650b41,
name: 'Google',
url: 'https://www.google.com',
type: 2
}
]
  • 指定跳過的條數,可以使用skip()方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/jjtest";
 
MongoClient.connect(url, { useNewUrlParser: true }, function(err, db) {
    if (err) throw err;
    var dbo = db.db("jjtest");
// 跳過前面兩條資料,讀取兩條資料
    dbo.collection("site").find().skip(2).limit(2).toArray(function(err, result) {
        if (err) throw err;
        console.log(result);
        db.close();
  });
});

執行結果如下:

1
2
3
4
5
6
7
8
9
10
$ node test.js
(node:5177) DeprecationWarning: current Server Discovery and Monitoring engine is deprecated, and will be removed in a future version. To use the new Server Discover and Monitoring engine, pass option { useUnifiedTopology: true } to the MongoClient constructor.
[
{
_id: 5e44f9b0e8a4cb13e7650b42,
name: 'Facebook',
url: 'https://zh-tw.facebook.com',
type: 3
}
]

註:礙於太多GIF圖檔,會造成網頁讀取緩慢,所以這邊就不再顯示示範。​‌‌​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​​​​‌‌​​​​​​‌‌​​‌​​​‌‌​​​‌​​‌‌​​‌‌​​‌​‌‌​‌​‌​​‌‌‌​​‌‌​‌‌‌‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌​‌​​‌‌‌​​‌‌​​‌​‌‌​‌​​‌‌​​‌‌​​‌‌​​‌​

補充

  • 關於警告DeprecationWarning:不建議使用當前的URL字符串解析器,並將在以後的版本中將其刪除。
    要使用新的解析器,請將選項{ useNewUrlParser: true , useUnifiedTopology: true}傳遞給MongoClient.connect
1
2
3
4
5
6
7
8
var MongoClient = require('mongodb').MongoClient;
var url = "mongodb://localhost:27017/jjtest";
 
MongoClient.connect(url, { useNewUrlParser: true , useUnifiedTopology: true}, function(err, db) {
  if (err) throw err;
  console.log("資料庫已建立!");
  db.close();
});

執行結果如下:

1
2
$ node test.js
資料庫已建立!

註:以上參考了
Node.js 连接 MongoDB
MongoDB 教程