zoukankan      html  css  js  c++  java
  • 在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();
              }
            });
          }
        });
      }
    });

    如下图所示:

  • 相关阅读:
    机器人
    仙岛求药(一)
    YZM 二分查找
    珠心算测验升级版
    博客正在施工
    【其他】16年12月博客阅读索引^_^
    博客有新家了!
    POJ No.3617【B008】
    POJ No.2386【B007】
    【刷题记录】部分和问题
  • 原文地址:https://www.cnblogs.com/tugenhua0707/p/9218186.html
Copyright © 2011-2022 走看看