我有一个类似的数组:
const tags = ["a", "b", "c"];
我的收藏集如下:
[{
_id: asdsadasd,
tagName: "a"
},
{
_id: qweqewqe,
tagName: "d"
}
]
我想过滤tags
数组,使其不包含集合中的任何标签(tagName
字段)。
示例输出:
["b", "c"]
这是我尝试过的:
[
{
'$group': {
'_id': null,
'tags': {
'$push': '$tagName'
}
}
}, {
'$project': {
'filteredTags': {
'$filter': {
'input': tags,
'as': 'item',
'cond': {
'$not': {
'$in': [
'$$item', '$tags'
]
}
}
}
}
}
}
]
这工作正常,但是我想知道是否存在使用聚合管道或以任何方式执行此操作的更有效方法。
答案 0 :(得分:0)
您可以使用以下汇总
db.collection.aggregate([
{ "$group": {
"_id": null,
"data": { "$push": "$tagName" }
}},
{ "$project": {
"tags": {
"$setDifference": [
["a", "b", "c"],
"$data"
]
}
}}
])