• Node.js Video Tutorials

Node.js - MongoDB 查詢



在 Node.js 的 mongodb 驅動程式模組中定義的 find() 和 findOne() 方法返回滿足查詢引數的指定集合中的所有文件或第一個文件。您可以使用邏輯運算子構建查詢物件中的過濾器,如下所示:

MongoDB 運算子

MongoDB 不使用傳統的邏輯運算子符號。相反,它有自己的一套運算子,如下所示:

序號 MongoDB 運算子和描述
1

$eq

等於 (==)

2

$gt

大於 (>)

3

$gte

大於或等於 (>=)

4

$in

如果等於陣列中的任何值

5

$lt

小於 (<)

6

$lte

小於或等於 (<=)

7

$ne

不等於 (!=)

8

$nin

如果不等於陣列中的任何值

這些運算子用於 find() 方法應用過濾器。以下語句返回價格 > 10000 的產品

示例

const {MongoClient} = require('mongodb');

async function main(){

   const uri = "mongodb://:27017/";
   const client = new MongoClient(uri);

   try {
      // Connect to the MongoDB cluster
      await client.connect();

      // Make the appropriate DB calls

      // Create a single new listing
      await fetchdocs(client, "mydb", "products");
       
   } finally {
      // Close the connection to the MongoDB cluster
      await client.close();
   }
}

main().catch(console.error);


async function fetchdocs(client, dbname, colname){
   const result = await client.db(dbname).collection(colname).find({"price":{$gt:10000}}).toArray();
   console.log(JSON.stringify(result));
}

輸出

[{"_id":"6580964f20f979d2e9a72ae7","ProductID":1,"Name":"Laptop","price":25000},{"_id":"6580964f20f979d2e9a72ae8","ProductID":2,"Name":"TV","price":40000}]

可以使用 $and 和 $or 運算子進行復合邏輯表示式。使用方法如下:

db.collection.find($and:[{"key1":"value1"}, {"key2":"value2"}])

使用以下命令獲取價格在 1000 到 10000 之間的產品。

async function fetchdocs(client, dbname, colname){
   const result = await client.db(dbname).collection(colname).find({$and:[{"price":{$gt:1000}}, {"price":{$lt:10000}}]}).toArray();
   console.log(JSON.stringify(result));
}

輸出

[{"_id":"6580964f20f979d2e9a72ae9","ProductID":3,"Name":"Router","price":2000},{"_id":"6580964f20f979d2e9a72aea","ProductID":4,"Name":"Scanner","price":5000},{"_id":"6580964f20f979d2e9a72aeb","ProductID":5,"Name":"Printer","price":9000}]

正則表示式

您還可以透過建立正則表示式來建立過濾器。$regex 變數用作查詢 JSON 表示中的鍵。以下程式碼返回名稱以 P 開頭的所有產品。

示例

async function fetchdocs(client, dbname, colname){
   const result = await client.db(dbname).collection(colname).find({Name:{$regex:"^P"}}).toArray();
   console.log(JSON.stringify(result));
}

輸出

[{"_id":"6580964f20f979d2e9a72aeb","ProductID":5,"Name":"Printer","price":9000}]

在以下示例中,結果集包含名稱以 Ro 開頭的文件。

async function fetchdocs(client, dbname, colname){
   const result = await client.db(dbname).collection(colname).find({Name: /Ro/}).toArray();
   console.log(JSON.stringify(result));
}

輸出

[{"_id":"6580964f20f979d2e9a72ae9","ProductID":3,"Name":"Router","price":2000}]

要獲取名稱以 er 結尾的產品,請在末尾使用 $ 符號。

async function fetchdocs(client, dbname, colname){
   const result = await client.db(dbname).collection(colname).find({Name: /er$/}).toArray();
   console.log(JSON.stringify(result));
}

輸出

[{"_id":"6580964f20f979d2e9a72ae9","ProductID":3,"Name":"Router","price":2000},{"_id":"6580964f20f979d2e9a72aea","ProductID":4,"Name":"Scanner","price":5000},{"_id":"6580964f20f979d2e9a72aeb","ProductID":5,"Name":"Printer","price":9000}]
廣告