【发布时间】: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,是的,这行得通,我一直在尝试找到一个示例,但找不到。
标签: mongodb mongodb-query nosql aggregation-framework aggregation