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

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

    在MongoDB数据库中查询数据(上) 在MongoDB数据库中,可以使用Collection对象的find方法从一个集合中查询多个数据文档,find方法使用方法如下所示: collection.fi ...

  2. mongodb数据库中插入数据

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

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

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

  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. [MongoDB] MongoDB增删查改

    MongoDB的三元素,数据库.集合.文档,集合就是表,文档就是行 开启MongoDB,cd切换到MongoDB的安装目录下的bin目录里,使用命令mongod 开启,参数:--dbpath 路径,把 ...

  2. [转]---UAP中如何判断当前APP在哪个平台设备上运行

    在做Win10开发的时候,我们可能经常会需要获得当前程序在在哪个平台设备上运行,用于UI和相关API的调用,那么可以通过什么方式知道当前APP运行的平台呢? 今天这里提供两个方法给大家做参考: 方法一 ...

  3. Python全栈学习_day004作业

    ,写代码,有如下列表,按照要求实现每一个功能 li = ["alex", "WuSir", "ritian", "barry&qu ...

  4. SFTP 文件配置

    sftp_config_file SFTP配置文件(Sublime Text 3 .VS Code) VS Code 的版本 { "host": "120.01.01.1 ...

  5. The Minimum Cycle Mean in a Digraph 《有向图中的最小平均权值回路》 Karp

    文件链接 Karp在1977年的论文,讲述了一种\(O(nm)\)的算法,用来求有向强连通图中最小平均权值回路(具体问题请参照这里) 本人翻译(有删改): 首先任取一个节点 \(s\) ,定义 \(F ...

  6. 微信小程序地图报错——ret is not defined

    刚刚在使用微信的map做地图时候 发现如下报错: 后来找了一会发现错误为经纬度写反了导致经纬度超出了范围 正确取值范围: latitude   纬度  浮点数,范围 -90 ~ 90 longitud ...

  7. 微信小程序request同步请求

    今天在搞微信小程序的时候顺手用了async,await死活不起作用,后来查了一下子,竟然不支持,那没办法就换了一种实现wx.request同步请求的方案 祭出promise来搞一搞,下面直接贴代码,简 ...

  8. 【读书笔记】iOS-动态类型和动态绑定

    id是泛类型,可以用来存放各种类型的对象,使用id也就是使用“动态类型”. 动态类型,就是指,对象实际使用的是哪一个类是在执行期间确定的,而非在编译期间. 虽然id类型可以定义任何类型的对象,但是不要 ...

  9. loadrunner 脚本开发-int型变量和字符串的相互转换

    脚本开发-int型变量和字符串的相互转换 by:授客 QQ:1033553122 字符串转化为int型变量 Action2() { int j = 0; j = atoi("12345&qu ...

  10. IOS 多文件上传 Java web端(后台) 使用List<MultipartFile> 接收出现的问题

    先上正确的示例: 主要是设置我们的request的content-type为multipart/form-data NSDictionary *param = @{@"assignee&qu ...