【问题标题】:$addToSet aggregation and multiple arrays$addToSet 聚合和多个数组
【发布时间】:2016-05-25 20:51:31
【问题描述】:

我有这个收藏:

[
    {
        _id: ObjectId('myId1'),
        probes: ['id_probe_1', 'id_probe_2']
    },
    {
        _id: ObjectId('myId2'),
        probes: ['id_probe_1', 'id_probe_3']
    }
]

我想得到一个这样的数组:

['id_probe_1', 'id_probe_2', 'id_probe_3']

所以我尝试了这个请求(来自 nodeJS 驱动程序):

let find = [
    {
        $match: {
            _id: {
                $in: [new ObjectId('miId1'), new ObjectId('myId2')]
            }
        }
    },
    {
        $group: {
            _id: null,
            probes: {
                $addToSet: {
                    $each: '$probes'
                }
            }
        }
    }
];

这不起作用,给我这个错误:

无效的运算符'$each'

来自doc,他们提到它将把整个数组作为单个元素附加。

如果表达式的值是一个数组,$addToSet 将整个数组追加为一个元素。

但他们没有说如何拥有一个独特的数组。所以我使用像this page 这样的$each 运算符表示(我真的不知道有什么区别......)

有没有办法让这个工作?

谢谢!

【问题讨论】:

    标签: node.js mongodb


    【解决方案1】:

    $group之前插入$unwind

      {$unwind:"$probes"},
    

    然后删除$each

    【讨论】:

    • 谢谢!我没看到。
    【解决方案2】:

    你为什么不尝试不同的操作?在mongo shell db.col.distinct('probs');你可以试试nodejs mongo驱动中的distinct功能。

    【讨论】:

    • 谢谢!它也有效,但我还需要在此基础上进行一些调整:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 2018-08-17
    相关资源
    最近更新 更多