MongoDB过滤器介绍

518 阅读2分钟

MongoDB Filter

MongoDB过滤器的定义

Mongodb过滤器聚合是在3.2版本中加入的,它用于选择数组的一个子集,并使用指定的条件返回结果。过滤器操作者将返回一个符合指定条件的元素数组,它将按原始顺序返回这些元素。在MongoDB中使用过滤操作符时,我们需要传递input、as和cond参数,input和cond是强制参数,而 "as "是可选参数。在MongoDB中使用过滤器操作符时,我们需要在过滤器关键字前使用$符号。

语法。

下面是MongoDB中过滤操作符的语法。

{$filter: {input: <array used as input string>, as: <The type of as keyword is string>, cond: <expression is used to evaluate the array elements>}}

MongoDB中过滤运算符的参数描述语法。

  1. 过滤 - 过滤运算符用于使用指定条件返回结果。我们在MongoDB中使用了一个过滤操作符,根据我们在查询中给出的条件来过滤结果。

  2. 输入 - 这是一个表达式,用于在一个数组中进行解析。在输入参数中,我们已经传递了数组字段来过滤文件。我们需要在过滤操作中使用输入字段参数之前使用$符号。

  3. As - 这是一个在过滤运算符中使用的可选参数。这是作为输入数组中的一个元素的变量名称。这个参数在过滤运算符中的类型是一个字符串。通过使用 "as "关键字,这个表达式可以访问输入数组中的每个元素。

  4. Cond - 这个参数用来决定我们应该把元素从结果数组中包括在哪里。这个参数在过滤操作中的类型是表达式。我们使用表达式来过滤指定集合中的数据。我们可以使用多个条件运算符来过滤数组元素中的数据。

过滤器如何在MongoDB中工作?

MongoDB的过滤器用于使用指定的条件从数组中过滤数据,这些条件是我们在查询中使用的。如果文档数组包含空值,那么使用过滤器操作者的结果将返回空数组。下面的例子显示,当我们的文档集合包含一个空数组时,过滤器操作者将返回一个空数组。

代码。

db.filter_test.find () db.filter_test.aggregate ({$project: { highmarks: { $filter: { input: "$marks", as: "marks", cond: { $gt: [ "$$marks", 10 ] } } } } } )

MongoDB Filter 1

图 - 过滤运算符将在结果中返回空的文档集。

  • 在上面的例子中,我们可以看到第二个文档有一个空数组,所以在这个字段上使用过滤器后,它将返回空数组。
  • 如果我们在不包含数组元素的字段上使用了过滤器,那么过滤器操作者将在输出中返回一个错误。
  • 如果数组元素的字段包含空值而不是数组元素,那么使用过滤器运算符提交的数组的结果就是空值。
  • 使用过滤运算符,我们也可以使用条件来过滤数组元素以获取数据。
  • 我们可以在MongoDB中使用过滤运算符在数组字段上使用以下条件运算符。
  1. 大于((>)或$gt)
  2. 小于((<)或$lt)
  3. 大于等于((>=)或$gte)
  4. 小于等于((<=)或$lte

使用上述条件,我们可以根据我们在查询中使用的条件来检索数据。

我假设我们对集合中不存在的字段应用了一个过滤器,那么数组元素的结果就会包含空值。

在下面的例子中,我们可以看到,我们对 marks1 字段应用了一个过滤器,但是这个字段并不在 filter_test 集合中。所以这个字段使用过滤器运算符的结果包含一个空值。

代码。

db.filter_test.aggregate({$project: { highmarks: { $filter: { input: "$marks1", as: "marks1", cond: { $gt: [ "$$marks1", 10 ] } } } } } ) db.filter_test.find ()

MongoDB Filter 2

图 - 如果数组字段不存在于集合中,过滤运算符返回空值。

例子

下面的例子显示了MongoDB中的过滤操作。

1) 使用大于条件过滤数组元素的过滤运算符

在下面的例子中,我们使用了一个带有大于条件的过滤操作符来过滤数组元素的数据。我们在mark字段上使用了过滤操作符,并使用大于条件从数组元素中检索大于65的mark。

代码。

db.filter_test.find () db.filter_test.aggregate({$project: { highmarks: { $filter: { input: "$marks", as: "marks", cond: { $gt: [ "$$marks", 65 ] } } } } } )

MongoDB Filter 3

图 - 使用大于条件的过滤运算符过滤数组元素的例子。

2) 使用小于条件过滤数组元素的过滤运算符

在下面的例子中,我们用小于条件的过滤运算符来过滤数组元素的数据。我们在marks字段上使用了过滤运算符,并使用小于条件从数组元素中检索小于75的分数。

代码。

db.filter_test.find () db.filter_test.aggregate({$project: { highmarks: { $filter: { input: "$marks", as: "marks", cond: { $lt: [ "$$marks", 75 ] } } } } } )

MongoDB Filter 4

图 - 使用小于条件的过滤运算符过滤数组元素的例子。

3) 使用大于等于条件过滤数组元素的过滤运算符

在下面的例子中,我们在marks字段上使用了过滤运算符,并使用大于等于条件从数组元素中检索大于等于65的分数。

代码。

db.filter_test.find () db.filter_test.aggregate({$project: { highmarks: { $filter: { input: "$marks", as: "marks", cond: { $gte: [ "$$marks", 65 ] } } } } } )

output

图 - 使用大于等于条件的过滤运算符来过滤数组元素的例子。

总结

MongoDB的过滤运算符被用来过滤数组中的元素。我们可以使用多个条件,如gt,gt, lt, gtegte和lte来检索数组元素的数据。我假设我们在空数组字段上使用了过滤操作,它将在输出中返回空结果。

推荐文章

这是一个关于MongoDB过滤器的指南。这里我们讨论了定义、语法、过滤器在MongoDB中如何工作?例子,以及代码实现。你也可以看看下面的文章,以了解更多信息

  1. MongoDB Join
  2. MongoDB findOne()
  3. MongoDB的分组
  4. MongoDB数据库

The postMongoDB Filterappeared first onEDUCBA.