在MongoDB数据库中查询数据(上)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在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();
          }
        });
      }
    });
  }
});

如下图所示:

以上是关于在MongoDB数据库中查询数据(上)的主要内容,如果未能解决你的问题,请参考以下文章

在MongoDB数据库中查询数据(上)

mongodb数据库批量插入海量数据时为啥有少部分数据丢失

mongodb 怎么对多个字段模糊查询

Node.js 使用 MongoDB 的 ObjectId 作为查询条件

mongodb 怎么查询树形结构

mongodb 查询子节点