我有两个数组,如下所示:
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'
]}
}
答案 0 :(得分:2)
$setDifference
运算符将起作用。您按错误的顺序放置了键名。
首先要保留其元素的数组,然后是要比较的数组。
db.test10.aggregate([
{
"$project": {
"newCustomerIds": {
"$setDifference": ["$ThisMonthCustomerIds", "$LastOneYearCustomerIds"]
}
}
}
])
上面的查询将返回输出:
{
"_id" : ObjectId("5f0bfcc55e654d34080a9282"),
"newCustomerIds" : [
9,
10
]
}