MongoDB聚合运算符:$isNumber

2024-03-25 06:28

本文主要是介绍MongoDB聚合运算符:$isNumber,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 语法
    • 举例
      • 用`$isNumber`检查字段是否是数值类型
      • 用`$isNumber`有条件的修改字段值

$isNumber聚合运算符返回操作数是否是一个数值(Integer、Decimal、Double、Long),返回一个布尔值,如果是数值返回true,否则返回false

语法

{ $isNumber: <expression> }

举例

$isNumber检查字段是否是数值类型

使用下面的脚本创建sensors集合:

db.sensors.insertMany([{ "_id" : 1, "reading" : NumberDecimal(26.0) },{ "_id" : 2, "reading" : NumberLong(25.0) },{ "_id" : 3, "reading" : NumberInt(24) },{ "_id" : 4, "reading" : 24.0 },{ "_id" : 5, "reading" : "24" },{ "_id" : 6, "reading" : [ NumberDecimal(26) ]}
])

下面的聚合使用$addFields阶段添加下面两个字段:

  • isNumber:表示reading字段是否为数值类型
  • type:表示reading的BSON类型
db.sensors.aggregate([{$addFields : {"isNumber" : { $isNumber : "$reading" },"hasType" : {$type : "$reading"}}
}])

聚合操作返回下面的结果:

{ "_id" : 1, "reading" : NumberDecimal("26.0000000000000"), "isNum " : true, "type" : "decimal" }
{ "_id" : 2, "reading" : NumberLong(25), "isNum " : true, "type" : "long" }
{ "_id" : 3, "reading" : 24, "isNum " : true, "type" : "int" }
{ "_id" : 4, "reading" : 24, "isNum " : true, "type" : "double" }
{ "_id" : 5, "reading" : "24", "isNum " : false, "type" : "string" }
{ "_id" : 6, "reading" : [ NumberDecimal("26.0000000000000") ], "isNum " : false, "type" : "array" }

$isNumber有条件的修改字段值

使用下面的脚本创建grades集合,包含了学生成绩的数据,grade字段可能是数值类型的分数或字符类型的级别:

db.getSiblingDB("examples").grades.insertMany([{"student_id" : 457864153,"class_id" : "M044","class_desc" : "Introduction to MongoDB 4.4","grade" : "A"},{"student_id" : 457864153,"class_id" : "M103","class_desc" : "Basic Cluster Administration","grade" : 3.0},{"student_id" : 978451637,"class_id" : "M320","class_desc" : "MongoDB Data Modeling","grade" : "C"},{"student_id" : 978451637,"class_id" : "M001","class_desc" : "MongoDB Basics","grade" : 4.0}
])

下面的聚合使用$addFields阶段添加points字段,包含了课程的成绩值。该阶段使用$cond运算符根据$isNumber的输出设置points的值:

  • 如果为 true,则成绩已包含数字分值。设定分数等于成绩。
  • 如果为 false,则 Grades包含字符串字母值。使用$switch将字母等级转换为其等效的分数,并赋予points

然后,聚合管道使用$group阶段对Student_id进行分组并计算学生的平均GPA。

 db.getSiblingDB("examples").grades.aggregate([{$addFields: {"points" : {$cond : {if : { $isNumber : "$grade" },then: "$grade" ,else: {$switch : {branches: [{ case: {$eq : ["$grade" , "A"]}, then : 4.0 },{ case: {$eq : ["$grade" , "B"]}, then : 3.0 },{ case: {$eq : ["$grade" , "C"]}, then : 2.0 },{ case: {$eq : ["$grade" , "D"]}, then : 1.0 },{ case: {$eq : ["$grade" , "F"]}, then : 0.0 }]}}}}}},{$group : {_id : "$student_id",GPA : {$avg : "$points"}}}
])

聚合管道为每个唯一的student_id输出一份文档以及该学生的 GPA 平均绩点:

{ "_id" : 457864153, "GPA" : 3.5 }
{ "_id" : 978451637, "GPA" : 3 }

这篇关于MongoDB聚合运算符:$isNumber的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/844100

相关文章

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更

使用Python实现操作mongodb详解

《使用Python实现操作mongodb详解》这篇文章主要为大家详细介绍了使用Python实现操作mongodb的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、示例二、常用指令三、遇到的问题一、示例from pymongo import MongoClientf

使用MongoDB进行数据存储的操作流程

《使用MongoDB进行数据存储的操作流程》在现代应用开发中,数据存储是一个至关重要的部分,随着数据量的增大和复杂性的增加,传统的关系型数据库有时难以应对高并发和大数据量的处理需求,MongoDB作为... 目录什么是MongoDB?MongoDB的优势使用MongoDB进行数据存储1. 安装MongoDB

Jenkins构建Maven聚合工程,指定构建子模块

一、设置单独编译构建子模块 配置: 1、Root POM指向父pom.xml 2、Goals and options指定构建模块的参数: mvn -pl project1/project1-son -am clean package 单独构建project1-son项目以及它所依赖的其它项目。 说明: mvn clean package -pl 父级模块名/子模块名 -am参数

【重学 MySQL】十九、位运算符的使用

【重学 MySQL】十九、位运算符的使用 示例检查权限添加权限移除权限 在 MySQL 中,位运算符允许你直接在整数类型的列或表达式上进行位级操作。这些操作对于处理那些需要在二进制表示上进行直接修改或比较的场景特别有用,比如权限管理、状态标记等。 &(位与) 对两个数的二进制表示进行位与操作。只有两个相应的二进制位都为 1 时,结果的该位才为 1,否则为 0。 |(位

C语言程序设计(数据类型、运算符与表达式)

一、C的数据类型 C语言提供的数据类型: 二、常量和变量 2.1常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型: 程序中用#define(预处理器指令)命令行定义变量将代表常量,用一个标识符代表一个常量,称为符合常量。 2.2变量 变量代表内存中具有特定属性的一个存储单元,用来存放数据,在程序运行期间,这些值是可以 改变的。 变

第二十四章 rust中的运算符重载

注意 本系列文章已升级、转移至我的自建站点中,本章原文为:rust中的运算符重载 目录 注意一、前言二、基本使用三、常用运算符四、通用约束 一、前言 C/C++中有运算符重载这一概念,它的目的是让即使含不相干的内容也能通过我们自定义的方法进行运算符操作运算。 比如字符串本身是不能相加的,但由于C++中的String重载了运算符+,所以我们就可以将两个字符串进行相加、但实际

ElasticSearch的DSL查询⑤(ES数据聚合、DSL语法数据聚合、RestClient数据聚合)

目录 一、数据聚合 1.1 DSL实现聚合 1.1.1 Bucket聚合  1.1.2 带条件聚合 1.1.3 Metric聚合 1.1.4 总结 2.1 RestClient实现聚合 2.1.1 Bucket聚合 2.1.2 带条件聚合 2.2.3 Metric聚合 一、数据聚合 聚合(aggregations)可以让我们极其方便的实现对数据的统计、分析、运算。例如:

《C++中的移动构造函数与移动赋值运算符:解锁高效编程的最佳实践》

在 C++的编程世界中,移动构造函数和移动赋值运算符是提升程序性能和效率的重要工具。理解并正确运用它们,可以让我们的代码更加高效、简洁和优雅。 一、引言 随着现代软件系统的日益复杂和对性能要求的不断提高,C++程序员需要不断探索新的技术和方法来优化代码。移动构造函数和移动赋值运算符的出现,为解决资源管理和性能优化问题提供了有力的手段。它们允许我们在不进行不必要的复制操作的情况下,高效地转移资源

七、Maven继承和聚合关系、及Maven的仓库及查找顺序

1.继承   2.聚合   3.Maven的仓库及查找顺序