我遇到了一些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
最後,我需要對所有未讀的線程進行計數,即應該選擇至少有一條未讀消息的線程。我將使用此信息在網頁上顯示徽章,以便用戶知道有一些未讀郵件。來自SQL我沒有用來存儲非規範化的東西,所以我結束了給定的結構。需要注意的是,我正在使用Meteor,因此並非MongoDB支持的所有東西都是開箱即用的,並且是被動的。 – chris1069603
如果你接受的答案有效,那麼有一個更好的方法來做到這一點。 – styvane