Я застрял в запросе MongoDB. У меня есть простая структура для управления потоками и сообщениями в моем приложении.Запросить непрочитанные сообщения
{
participants: [
'u1,'u2'
]
messages: [
{text: 'some message', readBy: ['u1','u2']}
{text: 'some other message', readBy: ['u1']}
]
}
Будучи «u2» Я хотел бы получить эту конкретную нить, возвращаемой запросом. Вот как далеко я пришел, но как только одно сообщение было прочитано 'u2', оно больше не возвращается, поскольку одно из сообщений было прочитано 'u2'.
Threads.find(
{
$and: [
{'participants': this.userId},
{'messages.readBy': {$nin: [this.userId]}}
]
}
)
Как я могу достичь этого, не меняя свою структуру данных?
Что такое ожидаемое результат вашего запроса? – styvane
В конце концов мне нужно, чтобы он подсчитывал все непрочитанные потоки, т. Е. Был выбран любой поток, имеющий хотя бы 1 непрочитанное сообщение. Я буду использовать эту информацию для отображения значка на веб-странице, чтобы пользователь знал, что есть непрочитанные сообщения. Исходя из SQL, я не использовал для хранения денормализованных материалов, поэтому я оказался с данной структурой. Важно отметить, что я использую Meteor, поэтому не все MongoDB поддерживает работы из коробки и является реактивным. – chris1069603
Если ответ, который вы приняли, работал, тогда есть лучший способ сделать это. – styvane