[英]Dropping a Mongo Database Collection in Meteor
有沒有辦法從Meteor的服務器端JavaScript代碼中刪除Mongo數據庫集合? (真的放棄了整個事情,而不僅僅是Meteor.Collection.remove({});
它的內容)
另外,還有一種方法可以從服務器端JavaScript代碼中刪除Meteor.Collection而不刪除相應的數據庫集合嗎?
為什么這樣?
userdoc.mailbox[12345]
)會變得安靜緩慢(例如,對於大郵箱)。 所以我想為我的每個用戶創建一個數據庫,將其用作郵箱,然后一條消息的最大大小為16 MB(非常可接受),我可以使用mongo查詢搜索郵箱。
此外,因為我正在使用Meteor,所以每當用戶登錄時,將這個mongo db集合作為Meteor.Collection加載將是很好的。當用戶停用他/她的帳戶時,db當然應該被刪除,如果用戶只需注銷,只應刪除Meteor.Collection(並在他/她再次登錄時恢復)。
在某種程度上,我已經有了這個工作,每個用戶都有一個自己的郵箱數據庫,但如果有人取消他/她的帳戶,我必須手動刪除這個特定的Mongo集合。 此外,我已經將所有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中獲取新的消息。
它工作得非常好,唯一缺少的是db collection drop。
謝謝你的任何暗示!
*我在這里熱情地寫了“丟棄”,這是一個完全錯誤。 我的意思是搜索。
不使用私有方法的解決方案是:
myMailbox.rawCollection().drop();
這在我看來更好,因為Meteor可以在沒有任何警告的情況下隨機丟棄或重命名私有方法。
您可以使用myMailbox._dropCollection()
直接從meteor中刪除myMailbox
集合。
我知道這個問題很老,但是當我搜索如何做到這一點時,這是第一次打擊
在子文檔中搜索...
為什么要使用子文檔? 我認為每個用戶的文檔?
每條消息必須是它自己的文檔
這是一種更好的方式,一組消息,每一個都是用戶的身份。 這樣,您可以過濾用戶在進行發布訂閱時看到的內容。
對於具有大郵箱的許多用戶而言,丟棄一個數據庫中的所有消息對於非常慢是非常慢的
這是因為大多數NoSQL DB(如果不是全部)都面向讀取密集型操作,而寫入密集型則不多。 因此,寫入(更新,插入,刪除, 擦除 )將花費更多時間。
此外,一些在線服務(我認為是Twitter或雅虎)會在停用帳戶時告訴您:“您的數據將在接下來的N天內被刪除。” 或類似的東西。 一個原因是您的數據需要時間刪除。
用戶無論如何都要離開,因此您可以告訴用戶您的帳戶已停用,並且您的數據將在接下來的幾天內從我們的數據庫中刪除。 要添加它,以便您可以立即響應用戶,通過向其發送空白回調異步執行刪除操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.