簡體   English   中英

在Meteor中刪除Mongo數據庫集合

[英]Dropping a Mongo Database Collection in Meteor

有沒有辦法從Meteor的服務器端JavaScript代碼中刪除Mongo數據庫集合? (真的放棄了整個事情,而不僅僅是Meteor.Collection.remove({});它的內容)

另外,還有一種方法可以從服務器端JavaScript代碼中刪除Meteor.Collection而不刪除相應的數據庫集合嗎?

為什么這樣?

  • 使用下划線或類似搜索子文檔(用戶文檔的子文檔,例如userdoc.mailbox[12345] )會變得安靜緩慢(例如,對於大郵箱)。
  • 另一方面,將所有用戶的所有消息(在郵箱示例的上下文中)放在一個大數據庫中,然后搜索*所有消息以查找一個或多個特定消息,結果非常非常慢(對於許多大用戶而言)郵箱)。
  • Mongo文檔還有大小限制,因此如果我將用戶的所有消息存儲在他/她的用戶文檔中,則郵箱的最大大小與所有其他用戶數據一起小於16 MB。

所以我想為我的每個用戶創建一個數據庫,將其用作郵箱,然后一條消息的最大大小為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM