vlambda博客
学习文章列表

查询NoSQL数据库的8个示例

磐创AI推荐搜索
Github
PyTorch
Keras




  磐创AI分享  

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


查询NoSQL数据库的8个示例

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

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

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


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

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

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

 
   
   
 
  1. {

  2. "_id" : ObjectId("600c1806289947de938c68ea"),

  3. "name" : "John",

  4. "age" : 32,

  5. "gender" : "male",

  6. "amount" : 32

  7. }

文档以JSON格式显示。


例1

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

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

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

 
   
   
 
  1. > db.customer.find( {name: "John"} )


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

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

 
   
   
 
  1. > db.customer.find( {name: "John"} ).pretty()


  2. {

  3. "_id" : ObjectId("600c1806289947de938c68ea"),

  4. "name" : "John",

  5. "age" : 32,

  6. "gender" : "male",

  7. "amount" : 32

  8. }

现在读起来容易多了。


例2

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

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

 
   
   
 
  1. > db.customer.find( {age: {$gt:40}} ).pretty()


  2. {

  3. "_id" : ObjectId("600c19d2289947de938c68ee"),

  4. "name" : "Jenny",

  5. "age" : 42,

  6. "gender" : "female",

  7. "amount" : 36

  8. }


例3

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

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

 
   
   
 
  1. > db.customer.find( {gender: "female", age: {$lt:25}} ).pretty()


  2. {

  3. "_id" : ObjectId("600c19d2289947de938c68f0"),

  4. "name" : "Samantha",

  5. "age" : 21,

  6. "gender" : "female",

  7. "amount" : 41

  8. }


  9. {

  10. "_id" : ObjectId("600c19d2289947de938c68f1"),

  11. "name" : "Laura",

  12. "age" : 24,

  13. "gender" : "female",

  14. "amount" : 51

  15. }

“$lt”代表“小于”。


例4

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

 
   
   
 
  1. > db.customer.find( {$and :[ {gender: "female", age: {$lt:25}} ]} ).pretty()

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


例5

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

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

 
   
   
 
  1. > db.customer.find( { $or: [ {gender: "male"}, {age: {$lt: 22}} ] })


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


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


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


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


例6

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

 
   
   
 
  1. > db.customer.aggregate([

  2. ... { $group: {_id: "$gender", total: {$sum: "$amount"} } }

  3. ... ])


  4. { "_id" : "female", "total" : 198 }

  5. { "_id" : "male", "total" : 103 }

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

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


例7

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

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

 
   
   
 
  1. > db.customer.aggregate([

  2. ... { $match: { age: {$gt:25} } },

  3. ... { $group: { _id: "$gender", avg: {$avg: "$amount"} } }

  4. ... ])


  5. { "_id" : "female", "avg" : 35.33 }

  6. { "_id" : "male", "avg" : 34.33 }


例8

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

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

 
   
   
 
  1. > db.customer.aggregate([

  2. ... { $match: { age: {$gt:25} } },

  3. ... { $group: { _id: "$gender", avg: {$avg: "$amount"} } },

  4. ... { $sort: {avg: 1} }

  5. ... ])


  6. { "_id" : "male", "avg" : 34.33 }

  7. { "_id" : "female", "avg" : 35.33 }

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


结论

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

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

感谢你的阅读。

磐创AI
AI行业最新动态,机器学习干货文章,深度学习原创博客,深度学习实战项目,Tensorflow中文原创教程,国外最新论文翻译。欢迎喜欢AI、关注深度学习的小伙伴加入我们。
511篇原创内容
Official Account
✄------------------------------------------------

看到这里,说明你喜欢这篇文章,请点击「在看」或顺手「转发」「点赞」。


▼     扫描二维码添加小编  ▼  ▼