在MongoDB數據庫中查詢數據(上)


在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();
          }
        });
      }
    });
  }
});

如下圖所示:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM