在MongoDB資料庫中查詢資料(上)

龍恩0707發表於2018-06-23

在MongoDB資料庫中查詢資料(上)

在MongoDB資料庫中,可以使用Collection物件的find方法從一個集合中查詢多個資料文件,find方法使用方法如下所示:

collection.find(selector, [options]);

selector值為一個物件,用於指定查詢時使用的查詢條件,options是可選的引數,該引數值是一個物件,用於指定查詢資料時所選用的選項。

find方法返回一個代表遊標的Cursor物件,在該遊標中包含了所有查詢到的資料文件資訊。可以使用Cursor物件的toArray方法獲取所有查詢到的資料文件,方法如下:

collection.find(selector, [options]).toArray(callback);

callback 用於指定資料文件操作結束時執行的回撥函式,該回撥函式使用如下所示:

function(err, docs) {};

在該回撥函式中,err引數為獲取資料文件操作失敗時觸發的錯誤物件,docs引數為一個陣列,包含了所有查詢到的資料文件。

如下是一個查詢 user結合中的所有資料,如果查詢失敗,則丟擲查詢資料失敗時觸發的錯誤物件,如果查詢成功,則在控制檯中輸出所有查詢到的資料,然後關閉資料庫,如下所示:

const mongo = require('mongodb');
const Server = mongo.Server;
const Db = mongo.Db;

const server = new Server('localhost', '27017', { auto_reconnect: true });
const db = new Db('dataDb', server, { safe: true });

db.open(function(err, db) {
  if (err) {
    throw err;
  } else {
    console.log('成功建立資料庫連線');
    db.collection('users', function(err, collection) {
      if (err) {
        throw err;
      } else {
        // 開始查詢集合users
        collection.find({}).toArray(function(err, docs) {
          if (err) {
            throw err;
          } else {
            console.log(docs);
            db.close();
          }
        });
      }
    });
  }
});

如下圖所示:

二:根據查詢條件來查詢資料

2.1 可以在查詢條件中指定需要查詢的欄位及欄位值,如下方法所示:

{<欄位名>:<欄位值>}

下面我們把上面的查詢條件改為如下:

collection.find({userName: '龍恩'});

所有程式碼如下:

const mongo = require('mongodb');
const Server = mongo.Server;
const Db = mongo.Db;

const server = new Server('localhost', '27017', { auto_reconnect: true });
const db = new Db('dataDb', server, { safe: true });

db.open(function(err, db) {
  if (err) {
    throw err;
  } else {
    console.log('成功建立資料庫連線');
    db.collection('users', function(err, collection) {
      if (err) {
        throw err;
      } else {
        // 開始查詢集合users
        collection.find({userName: '龍恩'}).toArray(function(err, docs) {
          if (err) {
            throw err;
          } else {
            console.log(docs);
            db.close();
          }
        });
      }
    });
  }
});

執行後如下所示:

2.2 可以在查詢選擇器中指定需要查詢的欄位並限定欄位值的範圍,如下方法所示:

{<欄位名>:{$in:[<欄位值1>,<欄位值2>...]}}

下面我們將find方法的查詢條件改為如下所示:

collection.find({userName:{$in:['空智']}});

下面是更改後的所有程式碼,如下所示:

const mongo = require('mongodb');
const Server = mongo.Server;
const Db = mongo.Db;

const server = new Server('localhost', '27017', { auto_reconnect: true });
const db = new Db('dataDb', server, { safe: true });

db.open(function(err, db) {
  if (err) {
    throw err;
  } else {
    console.log('成功建立資料庫連線');
    db.collection('users', function(err, collection) {
      if (err) {
        throw err;
      } else {
        // 開始查詢集合users
        collection.find({userName:{$in:['空智']}}).toArray(function(err, docs) {
          if (err) {
            throw err;
          } else {
            console.log(docs);
            db.close();
          }
        });
      }
    });
  }
});

執行結果如下所示:

2.3  指定多個欄位進行查詢

在一個複雜的查詢條件中,可能需要同時指定多個欄位值的條件查詢。下面我們往我們的資料中插入如下一些資料;程式碼如下:

const mongo = require('mongodb');
const Server = mongo.Server;
const Db = mongo.Db;

const server = new Server('localhost', '27017', { auto_reconnect: true });
const db = new Db('dataDb', server, { safe: true });
var docs = [
  {type: 'food', price: 11},
  {type: 'food', price: 10},
  {type: 'food', price: 9},
  {type: 'food', price: 8},
  {type: 'food', price: 9}
];
db.open(function(err, db) {
  if (err) {
    throw err;
  } else {
    console.log('成功建立資料庫連線');
    db.collection('users', function(err, collection) {
      collection.insert(docs, function(err, docs) {
        if (err) {
          throw err;
        } else {
          console.log(docs);
          db.close();
        }
      })
    });
  }
});

如下圖所示:

現在我們來查詢這些資料中 type 欄位值等於 'food', 且 price欄位值小於10的資料,如下程式碼所示:

collection.find({type:'food', price:{$lt:10}})

所有程式碼如下:

const mongo = require('mongodb');
const Server = mongo.Server;
const Db = mongo.Db;

const server = new Server('localhost', '27017', { auto_reconnect: true });
const db = new Db('dataDb', server, { safe: true });

db.open(function(err, db) {
  if (err) {
    throw err;
  } else {
    console.log('成功建立資料庫連線');
    db.collection('users', function(err, collection) {
      if (err) {
        throw err;
      } else {
        // 開始查詢集合users
        collection.find({type:'food', price:{$lt:10}}).toArray(function(err, docs) {
          if (err) {
            throw err;
          } else {
            console.log(docs);
            db.close();
          }
        });
      }
    });
  }
});

執行效果如下圖所示:

2.4 使用 '或' 關係來指定多個欄位值的查詢條件。

在一個複雜的查詢條件中,可能需要使用 ‘或’ 關係來指定多個欄位的查詢條件,比如 現在我們查詢,price為11, 或者price欄位值小於9的資料,使用如下方法:

collection.find({
  type:'food', 
  $or: [
    {price: 11},
    {price: {$lt: 9}}
  ]
});

所有程式碼如下所示:

const mongo = require('mongodb');
const Server = mongo.Server;
const Db = mongo.Db;

const server = new Server('localhost', '27017', { auto_reconnect: true });
const db = new Db('dataDb', server, { safe: true });

db.open(function(err, db) {
  if (err) {
    throw err;
  } else {
    console.log('成功建立資料庫連線');
    db.collection('users', function(err, collection) {
      if (err) {
        throw err;
      } else {
        // 開始查詢集合users
        collection.find({
          type:'food', 
          $or: [
            {price: 11},
            {price: {$lt: 9}}
          ]
        }).toArray(function(err, docs) {
          if (err) {
            throw err;
          } else {
            console.log(docs);
            db.close();
          }
        });
      }
    });
  }
});

如下圖所示:

相關文章