解决方案 #1:
var INPUT_ARRAY = ["1000000000", "1000000050", "1000000100", "1000000101"]
db.employees.aggregate([
{
$group: {
_id: null,
phone_numbers: { $push: "$phone" }
}
},
{
$addFields: {
missingNumbers: {
$filter: {
input: INPUT_ARRAY,
as: "phone_number",
cond: {
$not: {
$in: ["$$phone_number", "$phone_numbers"]
}
}
}
}
}
}
]);
解决方案#2:正如@Joe 在 cmets 中所建议的那样:
var INPUT_ARRAY = ["1000000000", "1000000050", "1000000100", "1000000101"]
db.employees.aggregate([
{
$group: {
_id: null,
phone_numbers: { $push: "$phone" }
}
},
{
$addFields: {
missingNumbers: {
$setDifference: [INPUT_ARRAY, "$phone_numbers"]
}
}
}
]);
输出:
{
"_id" : null,
"phone_numbers" : [
"1000000000",
"1000000050",
"10000060"
],
"missingNumbers" : [
"1000000100",
"1000000101"
]
}
employees收藏
/* 1 createdAt:3/18/2021, 8:37:45 PM*/
{
"_id" : ObjectId("60536cc1aafebb0d10399df8"),
"phone" : "1000000000",
"first_name" : "john",
"last_name" : "doe"
},
/* 2 createdAt:3/18/2021, 8:37:45 PM*/
{
"_id" : ObjectId("60536cc1aafebb0d10399df9"),
"phone" : "1000000050",
"first_name" : "jane",
"last_name" : "doe"
},
/* 3 createdAt:3/18/2021, 8:37:45 PM*/
{
"_id" : ObjectId("60536cc1aafebb0d10399dfa"),
"phone" : "10000060",
"first_name" : "joe",
"last_name" : "doe"
}