当前位置: 首页 > article >正文

MongoDB使用$literal获取表达式字面值

系统开发过程中,会有保存表达式的需求。比如保存数字或字符的字段拼接规则等。开发人员期望读取或保存这些规则时,不要被插入数据库或从数据库中读取规则时执行。或者保存模版时,也不希望讲模版中的表达式计算出结果。

mongodb的$literal方法,为这类需求提供了便利。

$literal,不会为表达式运算赋值,而是返回没有解析的表达式。

举例

结果

{$literal: { $add: [2, 3]}}

{ $add: [2, 3]}

{$literal: { $literal: 1}}

{ $literal: 1}

使用方法

在aggregation中使用,用于字段后面的描述。

{$literal: <value>}

使用举例

返回$的字面意义

在表达式中, $代表字段路径,提供访问字段值的路径。如$eq: ["$price", "$1"]执行了字段$price, $1的等值判断。

下面的例子中,使用$literal,将带有$符号的$1作为常量来使用。

db.storeInventory.insertMany([
  {"_id": 1, "item": "napkins", price: "$2.50"},
  {"_id": 2, "item": "coffee", price: "1"},
  {"_id": 3, "item": "soap", price: "$1"}
])

db.storeInventory.aggregate([
  {$project: {costsOneDollar: {$eq: ["$price", {$literal: "$1"}]}}}
])

查询语句中的costsOneDollar字段返回布尔值,当价格时1美元时,返回true,否则返回false。

{"_id": 1, "costsOneDollar": false},
{"_id": 2, "costsOneDollar": false},
{"_id": 3, "costsOneDollar": true}

在返回结果中添加新字段

aggregation中,通过定义表达式<field>: 1来指定$project中返回的字段。下面的例子中, 使用$literal返回1来实现project中添加新字段。

在books集合中,包含两条数据:

{"_id": 1, "title": "Dracula", "condition": "new"}
{"_id": 2, "title": "The Little Prince", "condition": "new"}

使用{$literal: 1}表达式返回一个新字段editionNumber

db.books.aggregate( [
  {$project: {"title": 1, "editionNumber": {$literal: 1}}}
])

执行后返回结果

{"_id": 1, "title": "Dracula", "editionNumber": 1}
{"_id": 2, "title": "The Little Prince", "editionNumber": 1}


http://www.kler.cn/a/145980.html

相关文章:

  • 无人机高速无刷动力电机核心设计技术
  • Python文本处理:LDA主题聚类模型
  • Kafka 日志存储 — 日志索引
  • 利用rsync备份全网服务器数据
  • 使用SIPP发起媒体流性能测试详解
  • Nginx:通过upstream进行代理转发
  • 案例030:基于微信小程序的英语学习交流平台
  • Spring Cache框架,实现了基于注解的缓存功能。
  • 【洛谷算法题】P5715-三位数排序【入门2分支结构】
  • Zynq-7000系列FPGA使用 Video Processing Subsystem 实现图像缩放,提供工程源码和技术支持
  • Nginx 学习笔记
  • 27. Spring源码篇之SpEL表达式之自定义解析模版
  • leetcode 最大整除子集
  • 【网络奇幻之旅】那年我与大数据的邂逅
  • VMWare虚拟机ubuntu克隆打不开
  • 如果客户端同时有ipv4和ipv6,浏览器是如何选择用哪种ip
  • Ubuntu20.04清理垃圾vscode缓存
  • ChatGPT初体验:注册、API Key获取与ChatAPI调用详解
  • RT-DETR论文阅读笔记(包括YOLO版本训练和官方版本训练)
  • PTA NeuDS-数据库题目集
  • 手把手教会你--渗透实战--Hack The Box-Starting Point-Meow--持续更新
  • MT6893_天玑 1200芯片规格参数介绍_datasheet规格书
  • 【深度学习】因果推断与机器学习的高级实践 | 数学建模
  • Rust语言入门教程(八) - 引用与借用
  • leetcode 41. 缺失的第一个正数
  • 【brpc学习实践十】streaming log实战