有没有办法在 MongoDB 聚合期间将字符串(格式:“1,5,20,22”)转换为整数数组( [1,5, 20, 22] )?

Posted

技术标签:

【中文标题】有没有办法在 MongoDB 聚合期间将字符串(格式:“1,5,20,22”)转换为整数数组( [1,5, 20, 22] )?【英文标题】:Is there a way to convert a string (format: "1,5,20,22") to an array of integers ( [1,5, 20, 22] ) during MongoDB aggregation? 【发布时间】:2020-02-19 14:26:17 【问题描述】:

我一直在使用 MongoDB(和 Metabase)。 Metabase 搜索方式基于 Mongo 聚合管道。

对于不了解的人,元数据库允许我们创建图表,您可以为这些图表定义过滤器,并在您的上使用这些过滤器Mongo 查询。

无论如何,我可以拥有的唯一过滤器类型是:StringNumberDate

但是,我有一个查询,我需要检查一个字段值是否是 $in 某个数组。

所以,我无法将数组作为过滤器发送。 单号不行。

我的想法是传递一个String(格式:"1,3,5,20"),然后将这个字符串转换成一个数字数组。 p>

有没有一种简单的方法可以在 Mongo Aggregation 上一次性完成此操作? 我试图不依赖多个管道阶段

我知道我可以使用split 来生成我的数组,但是从那里,我需要将我的新字符串数组上的所有值转换为整数值。

有什么想法吗?

【问题讨论】:

【参考方案1】:

你应该可以使用$map,也许:

$project:
   arrayField: $map: 
      input: $split: ["$stringField",","],
      as: "elem",
      in: $toInt: "$$elem"
   

Playground

【讨论】:

以上是关于有没有办法在 MongoDB 聚合期间将字符串(格式:“1,5,20,22”)转换为整数数组( [1,5, 20, 22] )?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 MongoDB 聚合期间为每个文档创建唯一 ID?

在 MongoDB 聚合框架中计算中位数

Mongodb 用 $cond 和 $each 聚合 $push

mongodb - 没有本地的聚合查找

如何将多个单元格中的字符串聚合到一个单元格中?

使用mongodb在utc中存储日期时如何处理时区问题?