Удаление коллекции базы данных Mongo в Метеоре
Есть ли способ вывести коллекцию базы данных Mongo из кода JavaScript на стороне сервера с помощью Meteor? (действительно бросить все это, а не толькоMeteor.Collection.remove({});
Это'содержание)
Кроме того, есть ли способ удалить Meteor.Collection из кода JavaScript на стороне сервера, не удаляя соответствующую коллекцию базы данных?
Зачем это делать?
Поиск во вложенных документах (вложенных документах пользователя, например,userdoc.mailbox[12345]
) с подчеркиванием или чем-то подобным получается довольно медленно (например, для больших почтовых ящиков).С другой стороны, размещение всех сообщений (в контексте примера почтового ящика) всех пользователей в одной большой БД и последующий поиск * всех сообщений по одному или нескольким конкретным сообщениям оказывается очень, очень медленным (для многих пользователей с большими почтовые ящики) тоже.Существует также ограничение на размер документов Mongo, поэтому, если я сохраню все сообщения пользователя в его / ее пользовательском документе, в почтовом ящике 'максимальный размер s < 16 МБ вместе со всеми другими пользовательскими данными.Поэтому я хочу иметь базу данных для каждого моего пользователя, чтобы использовать ее в качестве почтового ящика, тогда максимальный размер одного сообщения составляет 16 МБ (очень приемлемо), и я могу искать почтовый ящик с помощью запросов Монго.
Кроме того, так как яИспользуя Meteor, было бы хорошо, если бы эта коллекция моно-БД была загружена как Meteor.Collection при каждом входе пользователя в систему. Когда пользователь деактивирует свою учетную запись, БД, конечно, следует удалить, если пользователь просто выходит из системы. , только Meteor.Collection должен быть удален (и восстановлен, когда он / она снова входит в систему).
В какой-то степени я уже заработал, у каждого пользователя есть собственная база данных для почтового ящика, но если кто-нибудь отменит его / ее учетную запись, я должен удалить эту конкретную коллекцию Mongo вручную. Кроме того, я всегда поддерживаю все коллекции dong Монго в качестве Meteor.Collections, потому что я не могу их отбросить.
Это хорошо работающий фрагмент кода на стороне сервера для почтовых ящиков по одной коллекции на пользователя:
var mailboxes = {};
Meteor.users.find({}, {fields: {_id: 1}}).forEach(function(user) {
mailboxes[user._id] = new Meteor.Collection("Mailbox_" + user._id);
});
Meteor.publish("myMailbox", function(_query,_options) {
if (this.userId) {
return mailboxes[this.userId].find(_query, _options);
};
});
в то время как клиент просто подписывается определенным запросом с помощью этого фрагмента кода клиента:
myMailbox = new Meteor.Collection("Mailbox_"+Meteor.userId());
Deps.autorun(function(){
var filter=Session.get("mailboxFilter");
if(_.isObject(filter) && filter.query && filter.options)
Meteor.subscribe("myMailbox",filter.query,filter.options);
});
Так что, если клиент манипулирует переменной сеансаmailboxFilter», подписка обновляется, и пользователь получает новую группу сообщений в минимонго.
Это работает очень хорошо, единственное, чего не хватает, это отбрасывание коллекции БД.
Спасибо за любой намек уже!
* Я превосходно написал "капельный» здесь, что было полной ошибкой. Я имел в виду поиск.