如何获取不在MongoDB聚合管道中另一个数组中的数组元素?

时间:2020-07-13 06:08:10

标签: arrays mongodb

我有两个数组,如下所示:

LastOneYearCustomerIds:[1,2,3,4,5,6,7,8]
ThisMonthCustomerIds:[1,2,3,4,9,10]

我需要找到上一年没有的新客户ID。我尝试在MongoDB Compass中创建一个管道,但这样做会有所不同,我正在寻找可以在ThisMonthCustomerIds中返回元素的东西,但在LastOneYearCustomerIds中不能返回元素。 我还尝试关注堆栈溢出时的其他帖子,但找不到相关的解决方案。

预期结果是:

NewCustomerIds:[9,10]

我在聚合管道下面尝试过,这将给我带来不同,但不会带来新的CustomerId:

$project: {
  newCustomerIds:{
    $setDifference:
    ['$LastOneYearCustomerIds','$ThisMonthCustomerIds'
  ]}
}

1 个答案:

答案 0 :(得分:2)

$setDifference运算符将起作用。您按错误的顺序放置了键名。

首先要保留其元素的数组,然后是要比较的数组。

db.test10.aggregate([
    {
        "$project": {
            "newCustomerIds": {
                "$setDifference": ["$ThisMonthCustomerIds", "$LastOneYearCustomerIds"]
            }
        }
    }
])

上面的查询将返回输出:

{
    "_id" : ObjectId("5f0bfcc55e654d34080a9282"),
    "newCustomerIds" : [
        9,
        10
    ]
}