前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >查询NoSQL数据库的8个示例

查询NoSQL数据库的8个示例

作者头像
磐创AI
发布2021-04-21 09:53:26
2.3K0
发布2021-04-21 09:53:26
举报
文章被收录于专栏:磐创AI技术团队的专栏

磐创AI分享

作者 | Soner Yıldırım 编译 | VK 来源 | Towards Data Science

NoSQL是指非SQL或非关系数据库设计。它提供了一种有组织的方式来存储数据,但不是以表格的形式(即带标签的行和列)。

NoSQL数据库用来存储数据的常见结构有键值对、图形或文档。数据科学生态系统中使用了几种NoSQL数据库。在本文中,我们将使用一个流行的MongoDB。

MongoDB将数据存储为文档。MongoDB中的文档由字段-值对组成。文档以称为集合的结构组织。打个比方,文档可以看作是表中的一行,集合可以看作是整个表。


我们将通过10个示例演示如何从MongoDB数据库检索数据。

我们有一个叫“customer”的集合。客户集合中的文档包含客户姓名、年龄、性别和上次购买的金额。

以下是客户集合中的文档:

代码语言:javascript
复制
{
 
 "_id" : ObjectId("600c1806289947de938c68ea"),
 
 "name" : "John",
 
 "age" : 32,
 
 "gender" : "male",
 
 "amount" : 32
 
}
 

文档以JSON格式显示。


例1

查询属于特定客户的文档。

我们使用find方法从MongoDB数据库中查询文档。如果不使用任何参数或集合,find方法将检索所有文档。

我们希望看到John的文档 ,因此需要在find方法中指定name字段。

代码语言:javascript
复制
 > db.customer.find( {name: "John"} )
 
{ "_id" : ObjectId("600c1806289947de938c68ea"), "name" : "John", "age" : 32, "gender" : "male", "amount" : 32} 

我们可以附上pretty的方法,使文件看起来更吸引人。

代码语言:javascript
复制
 > db.customer.find( {name: "John"} ).pretty()
 
{
 
 "_id" : ObjectId("600c1806289947de938c68ea"),
 
 "name" : "John",
 
 "age" : 32,
 
 "gender" : "male",
 
 "amount" : 32
 
}

现在读起来容易多了。


例2

查询属于40岁以上客户的文档。

使用逻辑运算符将条件应用于年龄字段。“$gt”表示“大于”,用法如下。

代码语言:javascript
复制
> db.customer.find( {age: {$gt:40}} ).pretty()
 
 
{
 
 "_id" : ObjectId("600c19d2289947de938c68ee"),
 
 "name" : "Jenny",
 
 "age" : 42,
 
 "gender" : "female",
 
 "amount" : 36
 
}

例3

查询属于25岁以下女性客户的文档。

此示例类似于前两个示例的组合。这两个条件都必须满足,所以我们使用“和”逻辑来组合这些条件。可以写两个条件,用逗号分隔。

代码语言:javascript
复制
> db.customer.find( {gender: "female", age: {$lt:25}} ).pretty()
 

 
{
 
 "_id" : ObjectId("600c19d2289947de938c68f0"),
 
 "name" : "Samantha",
 
 "age" : 21,
 
 "gender" : "female",
 
 "amount" : 41
 
}

 
 {
 
 "_id" : ObjectId("600c19d2289947de938c68f1"),
 
 "name" : "Laura",
 
 "age" : 24,
 
 "gender" : "female",
 
 "amount" : 51
 
}

“$lt”代表“小于”。


例4

在本例中,我们将以不同的方式重复前面的示例。多个条件也可以与“and”逻辑组合,如下所示。

代码语言:javascript
复制
>db.customer.find( {$and :[ {gender: "female", age: {$lt:25}} ]} ).pretty()

用于组合条件的逻辑在开头指出。剩下的部分与前面的示例相同,但我们需要将条件放入一个列表([])。


例5

询问男性或25岁以下的客户。

这个例子需要一个带有“or”逻辑的复合查询。我们只需要把“\and”改成“\or”。

代码语言:javascript
复制
> db.customer.find( { 


 
{ "_id" : ObjectId("600c1806289947de938c68ea"), "name" : "John", "age" : 32, "gender" : "male", "amount" : 32 }
 


 
{ "_id" : ObjectId("600c19d2289947de938c68ed"), "name" : "Martin", "age" : 28, "gender" : "male", "amount" : 49 }
 


 
{ "_id" : ObjectId("600c19d2289947de938c68ef"), "name" : "Mike", "age" : 29, "gender" : "male", "amount" : 22 }
 


 
{ "_id" : ObjectId("600c19d2289947de938c68f0"), "name" : "Samantha", "age" : 21, "gender" : "female", "amount" : 41 
 

例6

MongoDB允许在从数据库检索时聚合值。例如,我们可以计算男性和女性的总购买量。使用aggregate方法而不是find方法。

代码语言:javascript
复制
> db.customer.aggregate([
 
... {  
Extra open brace or missing close brace
  
s
u
m
:"
 
... ])
 


 
{ "_id" : "female", "total" : 198 }
 
{ "_id" : "male", "total" : 103 }
 

让我们详细说明一下语法。我们首先通过选择“\$gender”作为id按gender列对文档进行分组。下一部分指定聚合函数(在我们的示例中是“$sum”)和要聚合的列。

如果你熟悉Pandas,那么语法与groupby函数非常相似。


例7

让我们进一步看前面的示例,并添加一个条件。因此,我们首先选择“match”条件的文档并应用聚合。

下面的查询是一个聚合管道,它首先选择25岁以上的客户,并计算男性和女性的平均购买金额。

代码语言:javascript
复制
> db.customer.aggregate([
 
... {  
Extra open brace or missing close brace
 gt:25} } }, 
... {  
Extra open brace or missing close brace
  
a
v
g
:"
 
... ])
 


 
{ "_id" : "female", "avg" : 35.33 }
 
{ "_id" : "male", "avg" : 34.33 }
 

例8

上一个示例中的查询只包含两个组,因此不必对结果进行排序。但是,我们可能有返回多个值的查询。在这种情况下,对结果进行排序是一种很好的做法。

我们可以按平均金额按升序对上一次查询的结果进行排序。

代码语言:javascript
复制
> db.customer.aggregate([
 
... {  
Extra open brace or missing close brace
 gt:25} } }, 
... {  
Extra open brace or missing close brace
  
a
v
g
:"
 
... { $sort: {avg: 1} }
 
... ])
 


 
{ "_id" : "male", "avg" : 34.33 }
 
{ "_id" : "female", "avg" : 35.33 }
 

我们刚刚在聚合管道中添加了“$sort”。用于排序的字段与排序行为一起指定。1表示升序,-1表示降序。


结论

SQL和NoSQL在数据科学生态系统中都是至关重要的。数据科学的燃料是数据,所以一切都从正确的、维护良好的和容易访问的数据开始。SQL和NoSQL都是这些过程的关键参与者。

我们简要介绍了如何查询MongoDB数据库。当然,还有很多事情要做。我们可能会为一个典型的任务编写更高级的查询。但是,一旦你熟悉了基础知识,就可以轻松地转到更高级的查询。

感谢你的阅读。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 磐创AI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 磐创AI分享
    • 例1
      • 例2
        • 例3
          • 例4
            • 例5
              • 例6
                • 例7
                  • 例8
                    • 结论
                    相关产品与服务
                    云数据库 MongoDB
                    腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档