在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数据库中查询数据(上)的更多相关文章

  1. MongoDB数据库中查询数据(下)

    MongoDB数据库中查询数据(下) 在find中,options参数值为一个对象,用来设置查询数据时使用的选项,下面我们来对该参数值对象中可以使用的属性进行介绍: 1. fields; 该属性值为一 ...

  2. flask再学习-思考之怎么从数据库中查询数据在页面展示!

    看别人视频觉得很简单,要自己做蒙蔽了!这样子.NO! 1. 流程: 首先要有和数据库连接的驱动!一般有PYMySQL mysqlclient 等 使用扩展Flask-SQLAlchemy 获得orm对 ...

  3. mongodb数据库中插入数据

    mongodb数据库中插入数据 一:connection 访问集合: 在mongodb数据库中,数据是存储在许多数据集合中,可以使用数据库对象的collection方法访问一个集合.该方法使用如下: ...

  4. 使用JDBC从数据库中查询数据的方法

    * ResultSet 结果集:封装了使用JDBC 进行查询的结果 * 1. 调用Statement 对象的 executeQuery(sql) 方法可以得到结果集 * 2. ResultSet 返回 ...

  5. 如何将存储在MongoDB数据库中的数据导出到Excel中?

    将MongoDB数据库中的数据导出到Excel中,只需以下几个步骤: (1)首先,打开MongoDB安装目录下的bin文件夹,(C:\Program Files (x86)\MongoDB\Serve ...

  6. JDBC方式从数据库中查询数据并显示

    1.创建数据库表myuser DROP TABLE IF EXISTS `myuser`; CREATE TABLE `myuser` ( `) NOT NULL COMMENT '姓名', `id` ...

  7. 使用JDBC从数据库中查询数据

    * ResultSet 结果集:封装了使用JDBC 进行查询的结果 * 1. 调用Statement 对象的 executeQuery(sql) 方法可以得到结果集 * 2. ResultSet 返回 ...

  8. C#Web从0到1—创建一个web并从VS集成的SQLlocalDB数据库中查询数据

    软件说明: VS2017,腾讯云服务器10元1个月,系统Win2012 R2标准版 第一步:建立第一个网页 建立工程 建好后,可以打开View选项打开项目资源浏览器和工具箱,后文会多次用到这两个版面 ...

  9. SAP 从数据库中查询数据,带有where 条件。

    数据库表 代码 *& Report ZSELECT_DATA_FROM_ZMAST_CUST *&------------------------------------------- ...

随机推荐

  1. nginx简单使用配置

    使用nginx首先要明确使用场景,这里是一台服务器实现多种类型访问:网站首页访问,GitLab访问,note(私人springboot项目),静态文件访问. 下面是一份配置文件 nginx.conf, ...

  2. 利用反射调用注解,模仿Spring

    简介 在开发中,我们经常用的就是利用@RequestMapping来调用我们自己的逻辑,现在我们来创建属于自己的注解模仿一下它. 1.新建属于自己的注解@SeayaMapping @Target({E ...

  3. 从函数式编程到Promise

    译者按: 近年来,函数式语言的特性都被其它语言学过去了.JavaScript异步编程中大显神通的Promise,其实源自于函数式编程的Monad! 原文: Functional Computation ...

  4. CSS3景深-perspective

    3D视图正方体: <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  5. 电脑黑屏,提示信息:windows 无法验证此文件的数字签名。

    前言 前几天,在群聊里,有个发小@我,发了张截图,说电脑打不开机了,黑屏,说什么windows 无法验证此文件的数字签名.我当时发了个纠结的表情,意思是我不是专业修电脑的,为什么问我啊.她说怎么了,好 ...

  6. js发送请求

    1.Chrome控制台中 net::ERR_CONNECTION_REFUSED js频繁发送请求,有可能连接被拒绝,可用setTimeout,过几秒发送,给个缓冲时间 var overlayAnal ...

  7. python之数据类型

    1.整数(int)integer 直接写出数字就是整数例: a = 0#查看变量的数据类型 type() -> #<class 'int'> class类,类型,类别print(10 ...

  8. Flutter 布局(九)- Flow、Table、Wrap详解

    本文主要介绍Flutter布局中的Flow.Table.Wrap控件,详细介绍了其布局行为以及使用场景,并对源码进行了分析. 1. Flow A widget that implements the ...

  9. (网页)Http状态码大全(200、404、500等)(转CSDN)

    当我们从客户端向服务器发送请求时 服务器向我们返回状态码 状态码就是告诉我们服务器响应的状态 通过它,我们就可以知道当前请求是成功了还是出现了什么问题 状态码是由3位数字和原因短语组成的(比如最常见的 ...

  10. 游标和递归sql 的一些代码

    DECLARE @UserID INT; --推广员帐号 DECLARE @ProxyID INT; --代理帐号 ; --分数 SELECT @UserID = [SpreaderID] FROM ...