Оператор
$elemMatch
найдет в коллекции ChatDB
те документы, в которых содержит хотя бы 1 элемент в participants
, соответствующий вашим критериям. Также мое исследование закончилось выводом о том, что пока нет возможности получить доступ к другому полю документа в операторе $elemMatch
. В любом случае, если это ваша цель, то вы можете использовать этот запрос:
ChatDB.aggregate([
{
$match: {
"participants.user": "12345",
$expr: {
$lt: [
"$participants.lastReadAt",
"$lastMessageAt"
]
}
}
}
])
Пн go детская площадка
Если вы также хотите фильтровать participants
что действительно соответствует критериям, то вам нужно добавить проекция этап:
ChatDB.aggregate([
{
$match: {
"participants.user": "12345",
$expr: {
$lt: [
"$participants.lastReadAt",
"$lastMessageAt"
]
}
}
},
{
$project: {
participants: {
$filter: {
input: "$participants",
as: "participant",
cond: {
$and: [
{
$eq: [
"$$participant.user",
"12345"
]
},
{
$lt: [
"$$participant.lastReadAt",
"$lastMessageAt"
]
}
]
}
}
}
}
}
])
Пн go детская площадка