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}
相关推荐
马尔代夫哈哈哈3 小时前
Spring IoC&DI
数据库·sql
液态不合群4 小时前
[特殊字符] MySQL 覆盖索引详解
数据库·mysql
计算机毕设VX:Fegn08955 小时前
计算机毕业设计|基于springboot + vue蛋糕店管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
瀚高PG实验室5 小时前
PostgreSQL到HighgoDB数据迁移
数据库·postgresql·瀚高数据库
打码人的日常分享6 小时前
智能制造数字化工厂解决方案
数据库·安全·web安全·云计算·制造
三水不滴6 小时前
Redis 过期删除与内存淘汰机制
数据库·经验分享·redis·笔记·后端·缓存
-孤存-6 小时前
MyBatis数据库配置与SQL操作全解析
数据库·mybatis
2301_822366357 小时前
使用Scikit-learn构建你的第一个机器学习模型
jvm·数据库·python
万邦科技Lafite9 小时前
一键获取京东商品评论信息,item_reviewAPI接口指南
java·服务器·数据库·开放api·淘宝开放平台·京东开放平台
自可乐9 小时前
Milvus向量数据库/RAG基础设施学习教程
数据库·人工智能·python·milvus