将字符串字段转换为 MongoDB 中的编码字符串
Posted
技术标签:
【中文标题】将字符串字段转换为 MongoDB 中的编码字符串【英文标题】:Convert String field to an Encoded String in MongoDB 【发布时间】:2021-11-09 23:20:08 【问题描述】:我的要求是编写一个 Mongo 聚合,通过对集合中的一些现有“实际”文档进行分组,返回一个“虚拟”文档列表。
我打算在我的 UI 项目中按原样使用此结果,我正在寻找可以在聚合过程中为其添加唯一且可解码的 ID 的方法。
例子:
[
... pipeline stages,
$group:
_id:
bookCode: '$bookCode',
bookName: '$bookName'
books:
$push: '$bookId'
,
$project:
//virtual unique Id by combining bookCode and bookName
virtualId:
$concat: [
$ifNull: [ '$_id.bookCode', '~' ]
,
'-',
$ifNull: [ '$_id.bookName', '~' ]
]
,
books: '$books'
]
样本输出:
[
virtualId: 'BC01-BOOKNAME01'
books: ['BID01', 'BID02']
,
virtualId: 'BC02-BOOKNAME01'
books: ['BID03', 'BID04']
,
virtualId: '~-BOOKNAME01'
books: ['BID05', 'BID06']
,
virtualId: 'BC02-~'
books: ['BID07', 'BID08']
,
virtualId: '~-~'
books: ['BID09', 'BID10']
,
]
这种连接分组字段以生成virtualId
的方法有效,但有没有办法让它更简洁?
也许我可以通过某种方式将其转换为人类无法读取但可解码的格式。
TLDR:我正在寻找在聚合查询本身中为每个结果文档创建 ID 的方法,如果我稍后对其进行解码,它将返回它的贡献字段。 MongoDB 版本:4.0.0
【问题讨论】:
请提供样本数据 @mohammadNaimi,我添加了一个示例输出。希望对您有所帮助。 你想要代码 id 为 base64 还是类似的东西? @mohammadNaimi,是的,这行得通,我一直在尝试找到一个示例,但找不到。 【参考方案1】:使用这个聚合我们使用函数并用js函数生成代码
db.collection.aggregate([
"$project":
books: 1,
virtualId:
"$function":
"body": "function(a)var t = '';for(i=0;i<a.length;i++)t=a.charCodeAt(i)+t;;return t;",
"args": [
"$virtualId"
],
"lang": "js"
])
https://mongoplayground.net/p/Lm_VjIG54BG
【讨论】:
这适用于 mongodb 4.4+。有没有办法为 v4.0.0 做类似的事情?以上是关于将字符串字段转换为 MongoDB 中的编码字符串的主要内容,如果未能解决你的问题,请参考以下文章
将 Mongodb 中的日期与 C# LINQ 驱动程序进行比较