В будущем потребуется хранить и редактировать огромные объёмы информации

На счет объемов, у вас наверняка для книг будут картинки (постеры), дак вот они могут занимать большую часть хранилища (+ большую часть расхода), я работал с одним книжным сайтом - на каждую книгу с отзывами (~4kb) есть несколько картинок (~120kb), т.е. ~97% (от книг) это картинки.
1 lega
Зависит от использования, например если отзывы будут выводится на странице книги и больше с ними ничего не будет происходить, то их удобно сделать вложенными, + экономия на запросах, одним запросом будет доставаться книга и отзывы.
А вот авторов лучше (можно) в отдельную коллекцию, т.к. их данные будут изменятся (имя, фотка, описание, теги?), Хотя если эти изменения очень редкие или вовсе нет, то можно сделать вложенными, при этом будет больший расход диска, но экономия на запросах.
lega Решение
Да и по производительности он уступает:

Есть ещё такой тест который показывает обратное: plnkr.co/edit/leZaT043Yffz4LfG8Ykq?p=preview

Я перешел от Knockout.js к Angular.js (а потом и к Angular Light), вот некоторые минусы первого:
1) В ng есть декларативный биндинг, в ko нет (раньше не было), хотя недавно натыкался на какие-то решения.
2) Из-за того что в angular dirty check - не нужно заворачивать данные в observable, это очень удобно.
3) В ng можно без проблем оперировать с данными (большие вычисления), в ko для этого нужно достать данные из observable, провести операции, потом положить обратно.
4) Так же в ko происходит "мгновенное" обновление, что несет 2 неприятности: 1) нагрузка, возможно не нужно обновлять именно сейчас 2) иногда нужно учитывать порядок обновления данных, т.к. зависимые расчеты могут сломаться.
5) Есть ещё не маленькая неприятность, когда в большом проекте нужно сделать доработку - и нужно сделать обычную переменную как observable - заставляет рефакторить, или наоборот перевести из observable в обычную для оптимизации, этой проблемы в angular нет.

Можете так же посмотреть Angular Light, он попроще, + есть некоторые полезные фичи которых нет в Angular.js
ok! Почему mongo позволяет логинится, даже в таком случае?
Происходит вход в консоль, но при этом данные не доступны, далее нужно авторизоваться через db.auth()

PS: Для ограничения доступа разработчики рекомендуют использовать средства ОС вместо авторизации по паролю.
1 lega
У вас в коде неправильные отступы - перемешаны табы и пробелы, используйте что-то одно, рекомендуется пробелы. Далее выровняйте elif по одному уровню кратно размеру отступа.
3 lega Решение
db.collection.find({}, { _id:0 })
1 lega
Сейчас при каждом возврате "назад" список ререндерится.
Зачем? Его можно просто скрывать. Там скорее всего так и сделано.
Любая работа с DOM заворачивается в директивы, так же (в теории) любой jQuery плагин можно завернуть в директиву, на случай если нет готовой директивы. Не рекомендуется работать с jQuery напрямую.
Обратите внимание ещё на Angular Light, возможно он вам больше понравится.
1 lega Решение
Можно просто перечислить что нужно поставить (в одном вызове):
sudo apt-get install ruby1.9.1 ruby1.9.3
lega Решение
> потери данных
Какая может быть потеря данных когда есть реплика?

> блокировки на всю базу.
Конечно это звучит не очень хорошо, но на зарубежных форумах пишут, что в первую очередь система упирается в io, на фоне чего локи выглядят не существенно (т.е. долгие локи как раз возникают из-за io)

Вчера делал примитивное тестирование локов у себя на ноутбуке: из питона делал insert документов, вышло 12k документов в сек, mongostat показывал 20% lock при этом запросы на чтение выполнялись без задержек. На сервере показатели должны быть лучше.
1 lega Решение
Я раньше сначала входил в консоль, выбирал базу и после авторизовался db.auth().
Но лучше защиту делать средствами ОС (как и рекомендуют на оф. сайте)
Если не сильно критично, то можете попробовать Angular Light, он удобнее для встраивания в готовое приложение. См. 5-ый способ привязывания, он может вам подойти.
1 lega
Используйте phantomjs для формирования результирующего html и последующей отдачи поисковикам.
lega Решение
Посмотрите на Angular Light, для встраивания в готовую "структуру" он может быть удобней.
Вам нужно что-то более "высокоуровневое", например на Angular Light ваш пример работает "без js": jsfiddle.net/lega911/S6Pzx
1 lega
Для Angular, в массиве нужно хранить словари вместо чисел, иначе вместо теста "update" будет "fill", это из-за того, что в простые типы нельзя поместить идентификатор и для ангулара список с числами будет каждый раз как новый, и вместо "update" сначала происходит удаление DOM, а потом "fill".
Поправил тест, для Angular.js улучилось время "updating", так же добавил тест для Angular Light:
jsfiddle.net/lega911/ZUne7
Всем спасибо.
я использовал inadyn (мульт-платформенная тузла от dynDNS), ей можно задать любой период проверки ip. пример настройки: www.py-my.ru/post/4bfb3c691d41c846bc00001c