我可以将逗号分隔值字符串拆分为聚合管道中的数组吗?

Can I split a comma separated value string into an array in the aggregate pipeline?

我有这样的数据:

{tags: "a, b, c", ...}

是否可以创建一个将其拆分为数组的管道阶段,如下所示:

{tags: ["a", "b", "c"], ...}

准备放松一下?

否则,最好的方法是什么?由于遗留原因,我宁愿保留原始数据不变。

聚合框架目前缺少执行此操作的运算符。存在一个 JIRA 问题 SERVER-6773,它提出了对 $split 运算符的需求。

虽然现在,您只能使用 mapReduce 来执行此操作。类似于:

db.collection.mapReduce(
    function() {
        this.tags.split(",").forEach(function(tag) {
            emit(tag,someData);
        });
    },
    function(key,results) {
        // do something with the many results
    },
    { "out": { "inline": 1 } }
)

或者随便什么。

简而言之,JavaScript .split() 是能够在 MongoDB 服务器查询中分隔分隔字符串的全部。所以你只能真正使用支持JavaScript处理的进程。