Я пробовал несколько разных ответов на форуме, но не помогло. Ниже приведен мой запрос, в котором у меня возникла проблема с «проектом для фильтрации» в $$this.star.email
, где star
— массив.
db.groups.aggregate([{
$match: {
_id: 162
}
}, {
$addFields: {
member: {
$arrayElemAt: [{
$filter: {
input: "$members",
cond: {
$eq: ["$$this.email", '[email protected]']
},
}
}, 0]
}
}
}, {
$project: {
messages: {
$filter: {
input: "$messages",
cond: {
$and: [
{$gte: ["$$this.ts", "$member.added"]},
{$eq : ["$$this.star.email",'5fbf1fb7b8d11a1f510e7f54' ]}
]
}
}
}
}
}]).toArray()
мой документ выглядит так. Я хочу отфильтровать messages
наличие star
с помощью email
"5fbf1fb7b8d11a1f510e7f54". Приведенный выше запрос работает нормально, но не дает желаемого результата.
{
"_id" : 162,
"messages" : [
{
"c" : "df64",
"ts" : ISODate("2020-12-16T04:39:15.707Z"),
"email" : "5fbf1fb7b8d11a1f510e7f54",
"groupId" : 162,
"s" : "s",
"star" : [
{
"email" : "5fbf1fb7b8d11a1f510e7f54",
"ts" : "2020-12-16T04:39:18.612Z"
}
]
},
{
"c" : "df64780ed694",
"ts" : ISODate("2020-12-16T04:22:24.621Z"),
"email" : "5fbf1fb7b8d11a1f510e7f54",
"groupId" : 162,
"s" : "s",
"star" : [ ]
}
]
}
$$this.star.email
вернет массив email
, вы можете использовать условие $in
внутри условия $filter
,
cond: {
$and: [
{ $gte: ["$$this.ts", "$member.added"] },
{ $in: ["5fbf1fb7b8d11a1f510e7f54", "$$this.star.email"] }
]
}