12

I'm trying to figure out the best design for the messaging system I'm porting from SQL Server to MongoDB - currently (in SQL Server) there are tree tables that store the message: Messages, Inbox and Sent. The message is stored in Messages table, and Inbox/Sent have entries for all recipients/senders for each message.

Now, in MongoDB I wanted to combine those three into one collection, with documents like this:

{
    _id: 
    subject:
    body:
    sender: {memid:, name:}
    recip: [{memid:, name:}, {memid:, name:}, {memid:, name:}, etc]

}

Now, I need to be able to retrieve all messages for a given recipient by memid and I have to do it fast, so an index is required (I will have hundreds of millions of such entries). So, my question is - can I index by a field of a document in an array?

Andrey
  • 20,487
  • 26
  • 108
  • 176

1 Answers1

14

see here https://docs.mongodb.com/manual/indexes/#multikey-index

Index by a field of a document in an array is supported by mongodb.

Example:

{ addr.zip: 1 }
Jeroen Vannevel
  • 43,651
  • 22
  • 107
  • 170
guolijing
  • 164
  • 1
  • 2
  • 1
    can you index on the entire sub-document array - http://stackoverflow.com/questions/19124536/multi-key-indexing-on-an-entire-array? – Kevin Meredith Oct 01 '13 at 19:50