Не понимаю в чем проблема. Есть небольшая коллекция, допустим 50 таких документов:
db.test.insert({a: 1, b: 'test', c: 'test'});
db.test.insert({a: 2, b: 'test', c: 'test'});
db.test.insert({a: 3, b: 'test', c: 'test'});
db.test.insert({a: 4, b: 'test', c: 'test'});
db.test.insert({a: 5, b: 'test', c: 'test'});
...
Все запросы отрабатывают моментально.
Добавляю массив на миллион записей к нескольким документам, например:
db.test.update({a: {$in: [1,2,3]}}, {$set: {d: [0...1000000]}});
Все. Теперь любой запрос эту коллекцию длится несколько секунд, независимо от того, выбираю я поле d или нет.
db.test.find({}, {a: 1, b: 1});
db.test.find({}, {d: 0});
db.test.find({a: 5});
db.test.find({a: 5}, {a: 1, b: 1});
db.test.find({a: {$in: [4,5]}});
db.test.find({a: {$in: [4,5]}}, {a: 1, b: 1});
db.test.find({a: {$in: [4,5]}}, {d: 0});
Любой из этих запросов длится несколько секунд, не смотря на то, что большинство из них не трогает поле d (в котором большой массив), ничего не ищут в этом поле, и не возвращают его в выдаче.
Пробовал создавать индексы по полям (a,b,c) - не помогло.
Можно ли это как-то оптимизировать?