MongoDB数据库中查询数据(下)
MongoDB数据库中查询数据(下)
在find中,options参数值为一个对象,用来设置查询数据时使用的选项,下面我们来对该参数值对象中可以使用的属性进行介绍:
1. fields; 该属性值为一个对象,该对象中各属性名用来显示指定在查询结果中需要包含或排除的字段。该属性值可以为1或0,当属性值为1时,代表需要在查询结果中包含该字段,当属性值为0时,代表需要在查询结果中排除该字段。
注意:在使用fields属性时,需要统一使用属性值1或属性值0来设置除_id字段之外的所有字段。
首先我们来看下数据库中有哪些数据,如下所示:

下面我们使用fields字段来在查询结果中包含或排除哪些字段,下面是在查询结果中指定只包含 userName: '龙恩'的字段(不单独指定_id字段时,_id字段也默认包含);如下代码:
collection.find({userName:'龙恩'},{fields: {userName: 1}});
所有代码如下:
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:'龙恩'},{fields: {userName: 1}}).toArray(function(err, docs) {
if (err) {
throw err;
} else {
console.log(docs);
db.close();
}
});
}
});
}
});
如下图所示:

我们可以单独指定_id字段是否需要包含或删除,如下是我们在查询结果中指定排除_id字段,如下代码:
collection.find({userName:'空智'}, {fields: {userName: 1, _id: 0}});
所有代码如下:
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:'空智'}, {fields: {userName: 1, _id: 0}}).toArray(function(err, docs) {
if (err) {
throw err;
} else {
console.log(docs);
db.close();
}
});
}
});
}
});
如下图所示:

如果在fields对象中使用属性值0来设置某些字段,则查询结果将包含除这些字段之外的所有字段。
我们可以先查询 userName="空智"这个字段后,然后通过fields来排除userName这个属性值,因此代码可以改成如下:
collection.find({userName: '空智'}, {fields: {userName: 0}});
所有代码如下所示:
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: '空智'}, {fields: {userName: 0}}).toArray(function(err, docs) {
if (err) {
throw err;
} else {
console.log(docs);
db.close();
}
});
}
});
}
});
如下图所示:

2. sort;
该属性是需要用来排序的字段,该属性值可以为一个数组或对象。
2.1 属性值为数组的情况下:
当属性值为一个数组时,该数组就包含两个元素,第一个元素值为用于排序的字段名,第二个元素值可以为1或-1,元素值为1时指定升序排序,元素值为-1时指定降序排序。且每一个元素为数组。
下面代码是通过type字段进行升序排序,price字段降序排序;代码如下:
collection.find({},
{ sort:
[
['type', 1],
['price', -1]
]
}
)
如下所有代码:
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({},
{ sort:
[
['type', 1],
['price', -1]
]
}
).toArray(function(err, docs) {
if (err) {
throw err;
} else {
console.log(docs);
db.close();
}
});
}
});
}
});
查询结果如下所示:

2.2 属性值为对象时
当sort属性值为一个对象时,该对象中各属性名为用于排序的字段名,各属性值可以为1或-1,属性值为1时指定升序排序,属性值为-1时指定降序排序。
下面代码是通过type字段进行升序排序,price字段降序排序;代码如下:
collection.find({},{sort: {type: 1, price: -1}});
所有代码还是和上面一样,只是把查询条件换了一下,运行结果和上面一样的。 可以看到属性值为对象时比数组更简单点。
3. limit
该属性是来限定查询结果条数,该属性值为一个整数,用于指定查询结果条数。
我们现在来修改查询的代码,我现在来查询 userName='空智'的其中2条数据,如下代码所示:
collection.find({userName: '空智'}, {limit: 2});
执行结果如下所示:

4. skip
该属性是来限定在从符合查询条件的结果中跳过前面多少条数据的文档,该属性值为一个整数,用于指定跳过的数据文档条数。
首先我们来看下数据库中一共有如下数据,如下所示:

然后我们在查询结果中指定查询 userName = '空智'的字段,数据库中一共有8条 userName='空智'的数据,我们现在跳过前面6条,从第七条开始,如下代码即可:
collection.find({userName: '空智'}, {skip: 6});
运行结果如下所示:

5. explain
该属性是来查看在执行一个find方法查询数据时的详细性能信息,使用该属性后,find方法并不真正执行数据的查询操作,该方法只返回在查询数据时的性能信息。如下代码:
collection.find({},{explain: true})
所有代码如下:
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({},{explain: true}).toArray(function(err, docs) {
if (err) {
throw err;
} else {
console.log(docs);
db.close();
}
});
}
});
}
});
如下图所示:

6. raw
该参数值对象中的raw属性来指定在查询数据时是否将二进制BSON数据文档存放在缓存区中,然后将该缓存区作为查询结果进行返回。 如下代码:
collection.find({},{raw: true});
如下图所示:

7. findOne
该方法是从一个集合中查询一条数据文档,当一个集合中存在多条符合查询条件的数据文档时,在默认情况下只返回第一条数据文档。
如下使用:
collection.findOne(selector, [options], callback);
selector 是查询条件,必填项。
options 是查询数据的限定条件。
callback: 用于指定获取查询数据操作结束时执行的回调函数,该回调函数如下所示:
function(err, docs) {}
第一个参数err是为获取数据操作失败时触发的错误对象,第二个参数为查询到的数据文档。如下代码:
collection.findOne({}, function(err, docs){})
所有代码如下:
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.findOne({}, function(err, docs) {
if (err) {
throw err;
} else {
console.log(docs);
db.close();
}
});
}
});
}
});
如下图所示:

MongoDB数据库中查询数据(下)的更多相关文章
- 在MongoDB数据库中查询数据(上)
在MongoDB数据库中查询数据(上) 在MongoDB数据库中,可以使用Collection对象的find方法从一个集合中查询多个数据文档,find方法使用方法如下所示: collection.fi ...
- mongodb数据库中插入数据
mongodb数据库中插入数据 一:connection 访问集合: 在mongodb数据库中,数据是存储在许多数据集合中,可以使用数据库对象的collection方法访问一个集合.该方法使用如下: ...
- flask再学习-思考之怎么从数据库中查询数据在页面展示!
看别人视频觉得很简单,要自己做蒙蔽了!这样子.NO! 1. 流程: 首先要有和数据库连接的驱动!一般有PYMySQL mysqlclient 等 使用扩展Flask-SQLAlchemy 获得orm对 ...
- 使用JDBC从数据库中查询数据的方法
* ResultSet 结果集:封装了使用JDBC 进行查询的结果 * 1. 调用Statement 对象的 executeQuery(sql) 方法可以得到结果集 * 2. ResultSet 返回 ...
- 如何将存储在MongoDB数据库中的数据导出到Excel中?
将MongoDB数据库中的数据导出到Excel中,只需以下几个步骤: (1)首先,打开MongoDB安装目录下的bin文件夹,(C:\Program Files (x86)\MongoDB\Serve ...
- JDBC方式从数据库中查询数据并显示
1.创建数据库表myuser DROP TABLE IF EXISTS `myuser`; CREATE TABLE `myuser` ( `) NOT NULL COMMENT '姓名', `id` ...
- 使用JDBC从数据库中查询数据
* ResultSet 结果集:封装了使用JDBC 进行查询的结果 * 1. 调用Statement 对象的 executeQuery(sql) 方法可以得到结果集 * 2. ResultSet 返回 ...
- C#Web从0到1—创建一个web并从VS集成的SQLlocalDB数据库中查询数据
软件说明: VS2017,腾讯云服务器10元1个月,系统Win2012 R2标准版 第一步:建立第一个网页 建立工程 建好后,可以打开View选项打开项目资源浏览器和工具箱,后文会多次用到这两个版面 ...
- SAP 从数据库中查询数据,带有where 条件。
数据库表 代码 *& Report ZSELECT_DATA_FROM_ZMAST_CUST *&------------------------------------------- ...
随机推荐
- Django&Flask区别
Flask Flask 本身只有一个内核,几乎所有的功能都需要用第三方的扩展来实现. Flask 没有默认使用的数据库,默认依赖两个外部库:Jinja2 模板引擎和 WSGI 工具箱(采用的时 Wer ...
- 新浪微博POI点签到数据及可视化的初步成果
目前仅对山东省区域进行了抓取,权限不够高,抓取的速度非常慢,所以导致效率比较低... 数据抓取采用调用微博开放平台API的方法,数据存储采用mysql,格点数据分辨率为30″,山东省的MBR范围内(包 ...
- Kotlin入门(5)字符串及其格式化
上一篇文章介绍了数组的声明和操作,包括字符串数组的用法.注意到Kotlin的字符串类也叫String,那么String在Java和Kotlin中的用法有哪些差异呢?这便是本文所要阐述的内容了. 首先要 ...
- retrofit框架接口调用时候报Throwing new exception
最近在开发的时候遇到了一个很坑的问题,在三星6.0手机上请求接口时候报了一个异常:Throwing new exception 'length=1658; index=3248' with unexp ...
- asp.net学习——Response对象
(2011-03-29 07:33:03) 转载▼ 标签: 杂谈 分类: asp.net学习 响应的缓冲输出:为了提高服务器的性能,asp.net向浏览器Write的时候默认并不会每Write一次都会 ...
- python TCP socket套接字编程以及注意事项
TCPServer.py #coding:utf-8 import socket #s 等待链接 #c 实时通讯 s = socket.socket(socket.AF_INET,socket.SOC ...
- 安全之路 —— C++实现进程守护
简介 所谓进程守护,就是A进程为了保护自己不被结束,创建了一个守护线程来保护自己,一旦被结束进程,便重新启动.进程守护的方法多被应用于恶意软件,是一个保护自己进程的一个简单方式,在ring3下即可轻松 ...
- Oracle 表操作(转)
1.增加新字段:alter table table_name add (name varchar(20) default 'http://www.zangjing.net/');. 2.修改表字段:a ...
- 基于LNMP(fastcgi协议)环境部署、原理介绍以及fastcgi_cache配置以及upstream模块负载均衡讲解
ngx_http_proxy_module只能反向代理后端使用HTTP协议的主机.而ngx_http_fastcgi_module只能反向代理后端使用FPM或者使用FastCGI协议的客户端. 一.部 ...
- OffsetDateTime工具类
java8时间API介绍及使用 java7及之前版本,推荐使用jodatimejava8提供的datetime api参考了jodatime 在新的时间API中, Instant表示一个精确的时间点, ...