有什麼辦法從服務器端JavaScript代碼中使用Meteor刪除Mongo數據庫收集? (真的降了整個事情,而不僅僅是Meteor.Collection.remove({});
它的內容)丟棄流星中的Mongo數據庫收集
另外,有沒有還到服務器端內掉落Meteor.Collection的方式JavaScript代碼不刪除相應的數據庫收集?
爲什麼這樣做?
- 在子文檔(用戶文檔的子文檔,例如
userdoc.mailbox[12345]
)用下劃線或相似搜索原來安靜慢(例如,對於大郵箱)。 - 另一方面,將所有用戶的所有郵件(以郵箱爲例)放在一個大型數據庫中,然後搜索*所有郵件中的一個或多個特定郵件,結果非常非常慢(對於很多擁有大型郵箱的用戶)。
- 對於Mongo文檔也有大小限制,所以如果我將用戶的所有郵件存儲在他/她的用戶文檔中,則郵箱的最大大小爲< 16 MB以及所有其他用戶數據。
所以我想爲我的每一個用戶使用它作爲一個郵箱數據庫,那麼對於一個消息的最大大小爲16 MB(非常可以接受的),我可以使用蒙戈查詢搜索的郵箱。另外,由於我使用的是Meteor,因此只要用戶登錄,就可以將這個mongo數據庫集合加載爲Meteor.Collection,這很好。當用戶停用他/她的帳戶時,db應該當然被丟棄,如果用戶剛剛註銷,只有Meteor.Collection應該被丟棄(並且在他/她再次登錄時恢復)。
在某種程度上,我已經得到了這個工作,每個用戶都有自己的郵箱分貝,但是如果有人取消他/她的帳戶,我必須手動刪除這個特定的Mongo Collection。另外,我一直保留所有mongo db集合作爲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」,訂閱被更新並且用戶在minimongo中獲得新的一組消息。
它工作得很好,唯一缺少的是數據庫收集丟失。
感謝您的任何提示!
*我預先在這裏寫下了「滴」,這是一個徹頭徹尾的錯誤。我的意思是搜索。
嘿約瑟夫!謝謝,但這就是我現在正在做的事情,但我需要爲用戶的收件箱爲每個用戶提供一個數據庫,以便通過使用mong db查詢來加快在收件箱中搜索一個或多個特定消息的過程。 Mongo無法在用戶文檔中使用message-subdocuments。我讀過mongo db實際上支持程序化丟棄數據庫,我只是不知道如何在流星中做到這一點。我的意思是..程序化的數據庫創建在Meteor中是沒有問題的。爲什麼要放棄一個? –