2010-07-16 2 views
1

У меня есть набор данных в MongoDB, который включает в себя большой набор электронных писем, и мне нужно иметь возможность добавлять электронные письма в набор и проверять, находятся ли определенные электронные письма в наборе. Я думал о том, чтобы делать с такой структурой документов:реализация большого набора в MongoDB

{'key': 'foo', 'emails': ['[email protected]', '[email protected]', ...]}

и используйте $ addToSet и $ in. Но проблема в том, что у Mongo есть ограничение на 4 Мбайт документа, и если есть много писем, этого может быть недостаточно. Я мог бы разделить его по ключевым словам/частям электронной почты, но я обеспокоен тем, что он будет делать оба соответствия (поскольку электронные письма сейчас не в одном месте) и вставка (поскольку мне нужно будет проверить уникальность) медленнее. Итак, что было бы лучшим способом сделать это?

ответ

1

В зависимости от того, сколько наборов электронных писем вы собираетесь сделать, вы можете сделать каждый набор писем коллекцией, в которой каждый документ состоял только из адреса электронной почты. Затем можно создать уникальный индекс по адресу электронной почты:

db.foo.ensureIndex({email:1},{unique:true})

+0

Существует много наборов, каждый со своим собственным ключом (поиск является withis писем с тем же ключом). Индекс может работать, но я беспокоюсь, что он будет медленнее, поскольку электронные письма не будут храниться вместе. – StasM

+0

Если вы только заботитесь об уникальности внутри одной коллекции, создание уникального индекса происходит так же быстро, как и в случае с ним. Именно цель использования индексов. –

Смежные вопросы