Если у вас нет индекса, выполняется сканирование таблицы, как и в любой системе баз данных.
Если документы находятся в памяти, это все равно будет относительно быстро, но все равно займет определенный промежуток времени в зависимости от количества документов в коллекции, поскольку база данных должна просматривать каждый из них. О (п)
Проблема в том, что у вас есть небольшой набор переменных ключей для каждого документа или большое количество ключей, которые должны быть в каждом документе?
Хранилища данных, ориентированные на столбцы, должны хранить большое количество столбцов для моделирования различных атрибутов, но mongodb более гибок из-за модели данных документа.
Если у вас есть документы с небольшим количеством различных атрибутов (из большого набора атрибутов), это индексируется и будет O (logn).
Ваши документы будут выглядеть так:
{
"name":"some name",
"attrs":[
{"n":"subject","v":"the subject"},
{"n":"description","v":"Some amazing description"},
{"n":"comments","v":"Comments on this thing"},
]
}
Будьте индексируемы так:
db.mycollection.ensureIndex({"attrs.n":1, "attrs.v":1})
и задавайте вопросы следующим образом:
db.mycollection.find({attrs: {$elemMatch: {n: "subject", v: "the subject"}}})