博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在MongoDB数据库中查询数据(上)
阅读量:6366 次
发布时间:2019-06-23

本文共 5380 字,大约阅读时间需要 17 分钟。

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

如下图所示:

转载地址:http://izrma.baihongyu.com/

你可能感兴趣的文章
一个完整小巧的Redux全家桶项目
查看>>
at()函数改变图像的对比度和亮度(openCV)(4)
查看>>
javascript数据类型判断方法
查看>>
sublime插件问题
查看>>
mysql中的max_allowed_packet参数
查看>>
《进击的虫师》爬取豆瓣电影海报(Top250)
查看>>
Klog - 利用Kotlin的类扩展,为你的log输出带来无限遐想
查看>>
js 实现链式调用命名空间
查看>>
Ali-HBase的SQL实践与改进
查看>>
常见Serialize技术探秘(ObjectXXStream、XML、JSON、JDBC byte编码、Protobuf)
查看>>
Java架构-高并发的解决方案
查看>>
CSS技巧总结2
查看>>
springboot无法注入公共模块类的问题
查看>>
React Native代码提示工具
查看>>
10分钟讲解次贷危机
查看>>
TableViewCell的复用
查看>>
HTTP全解析
查看>>
MYSQL中视图的使用
查看>>
如何在NEO共识节点间分配任务
查看>>
CentOS6系统编译部署LAMP(Linux, Apache, MySQL, PHP)环境
查看>>