У меня есть данные в mongodb что-то вроде этого. Есть коллекция кошек. Кошки сортируются по разным категориям и оцениваются от 1 до 100. Одна кошка может находиться в 2 или более категориях. Есть тысячи категорий.
КОЛЛЕКЦИЯ: «кошки»
КЛЮЧИ:
rank.category1 = 1; // ranked 1st in category #1
rank.category2 = 13; // ranked 13th in category #2
rank.category425 = 50; // ranked 50th in category #425
ВОПРОС:
Если я хочу сделать find (), чтобы вернуть всех «кошек», которые имеют «rank» в «category2», где $ существует => «rank.category2», каков правильный способ индексировать это? Могу ли я просто поместить простой возрастающий индекс в коллекцию «rank» или мне нужен индекс для всех 1000+ ключей категории *? Есть ли лучший способ хранить эту информацию или более простой способ ее индексирования?
Как насчет …
rank.categories = [1, 2, 425];
rank.category = {
1 : 1,
2 : 13,
425 : 50
}
Вы можете индексировать db.collection.ensureIndex({"categories":1})
, Теперь вы можете искать по категориям и получить рейтинг каждой, когда вы найдете одну.
Других решений пока нет …