My question may be not very good formulated because I haven’t worked with MongoDB yet, so I’d want to know one thing.
I have an object (record/document/anything else) in my database – in global scope.
And have a really huge array of other objects in this object.
So, what about speed of search in global scope vs search “inside” object? Is it possible to index all “inner” records?
Thanks beforehand.
So, like this
users: {
..
user_maria:
{
age: "18",
best_comments :
{
goodnight:"23rr",
sleeptired:"dsf3"
..
}
}
user_ben:
{
age: "18",
best_comments :
{
one:"23rr",
two:"dsf3"
..
}
}
So, how can I make it fast to find user_maria->best_comments->goodnight (index context of collections “best_comment”) ?
First of all, your example schema is very questionable. If you want to embed comments (which is a big if), you’d want to store them in an array for appropriate indexing. Also, post your schema in JSON format so we don’t have to parse the whole name/value thing :
With that schema in mind you can put an index on name and best_comments.title for example like so :
Then, when you want the query you mentioned, simply do
And the database will hit the index and will return this document very fast.
Now, all that said. Your schema is very questionable. You mention you want to query specific comments but that requires either comments being in a seperate collection or you filtering the comments array app-side. Additionally having huge, ever growing embedded arrays in documents can become a problem. Documents have a 16mb limit and if document increase in size all the time mongo will have to continuously move them on disk.
My advice :
100 comments per document)
Read up on Mongo/NoSQL schema design. You always query for root documents so if you end up needing a small part of a large embedded structure you need to reexamine your schema or you’ll be pumping huge documents over the connection and require app-side filtering.