MongoDB 聚合 - 用另一个数组过滤数组
MongoDB Aggregation - Filter array with another array
{
"_id": {
"$oid": "5f8f067ecf44854d4c3b5286"
},
"photo": "",
"followers": [
{
"$oid": "5f8f26f8cf44854d4c3b528f"
},
{
"$oid": "5f9f1984cf44854d4c3b5292"
},
{
"$oid": "5f8f06c9cf44854d4c3b528e"
},
{
"$oid": "604b1d0649a2052e912f9c3f"
},
{
"$oid": "5f8f0688cf44854d4c3b5287"
},
{
"$oid": "62371c3b8fabe53cf4386b1f"
}
],
"following": [
{
"$oid": "5f9f1984cf44854d4c3b5292"
},
{
"$oid": "5f8f26f8cf44854d4c3b528f"
},
{
"$oid": "5f8f06c9cf44854d4c3b528e"
}
],
"email": "johndoe@test.com",
"firstname": "John",
"lastname": "Doe",
"username": "JohnDoe01",
"__v": 0
}
我正在尝试获取特定用户的关注者列表。我有一个被阻止用户的列表,因此我需要将这些用户从关注者列表中排除。
例如:
let blockedUsers = ['5f8f26f8cf44854d4c3b528f', '5f9f1984cf44854d4c3b5292'];
仅供参考:关注者也是用户对象
如果需要更多详细信息,请告诉我。提前致谢。
您可以使用$filter
过滤不在黑名单中的关注者(id)。
执行比较时,请确保:
选项 1:阻止列表中的值强制转换为 ObjectId
或
选项 2:将 follower
转换为 string
必须比较相同类型的值。
db.collection.aggregate({
$set: {
followers: {
$filter: {
input: "$followers",
cond: {
$not: {
$in: [
{
$toString: "$$this" // Or "$$this._id" for user Object
},
[
"5f8f26f8cf44854d4c3b528f",
"5f9f1984cf44854d4c3b5292"
]
]
}
}
}
}
}
})
{
"_id": {
"$oid": "5f8f067ecf44854d4c3b5286"
},
"photo": "",
"followers": [
{
"$oid": "5f8f26f8cf44854d4c3b528f"
},
{
"$oid": "5f9f1984cf44854d4c3b5292"
},
{
"$oid": "5f8f06c9cf44854d4c3b528e"
},
{
"$oid": "604b1d0649a2052e912f9c3f"
},
{
"$oid": "5f8f0688cf44854d4c3b5287"
},
{
"$oid": "62371c3b8fabe53cf4386b1f"
}
],
"following": [
{
"$oid": "5f9f1984cf44854d4c3b5292"
},
{
"$oid": "5f8f26f8cf44854d4c3b528f"
},
{
"$oid": "5f8f06c9cf44854d4c3b528e"
}
],
"email": "johndoe@test.com",
"firstname": "John",
"lastname": "Doe",
"username": "JohnDoe01",
"__v": 0
}
我正在尝试获取特定用户的关注者列表。我有一个被阻止用户的列表,因此我需要将这些用户从关注者列表中排除。 例如:
let blockedUsers = ['5f8f26f8cf44854d4c3b528f', '5f9f1984cf44854d4c3b5292'];
仅供参考:关注者也是用户对象
如果需要更多详细信息,请告诉我。提前致谢。
您可以使用$filter
过滤不在黑名单中的关注者(id)。
执行比较时,请确保:
选项 1:阻止列表中的值强制转换为 ObjectId
或
选项 2:将 follower
转换为 string
必须比较相同类型的值。
db.collection.aggregate({
$set: {
followers: {
$filter: {
input: "$followers",
cond: {
$not: {
$in: [
{
$toString: "$$this" // Or "$$this._id" for user Object
},
[
"5f8f26f8cf44854d4c3b528f",
"5f9f1984cf44854d4c3b5292"
]
]
}
}
}
}
}
})