2015-04-05 90 views
2

我們有多個網站指向同一個MongoDB。例如面向公衆網站,內部管理網站等。流星在MongoDB中重命名Meteor.users集合名稱

我們希望爲不同的網站有不同的用戶集合。有什麼方法可以指示Meteor在使用Meteor.users變量訪問用戶集合時在實際數據庫中使用不同的集合名稱。

+0

如果使用「應用程序」一詞而不是「網站」,則會更好!謝謝 – 2016-07-30 18:20:12

回答

1

從源代碼看來,集合名稱是硬編碼在accounts-base包中。我沒有看到任何通過代碼設置名稱的選項。

Meteor.users = new Mongo.Collection("users", { 
     _preventAutopublish: true, 
     connection: Meteor.isClient ?  Accounts.connection : Meteor.connection 
}); 
1

不,可悲的是,這是硬編碼到軟件包中,正如Brian所說,軟件包沒有提供定製空間。

但是,您可以非常輕鬆地爲Meteor.users集合中的每個文檔添加新密鑰accountTypeaccountType可以指定該用戶是屬於面向前方的公共網站還是屬於內部管理網站。

例如,用戶文檔:

{ 
    username: "Pavan" 
    accountType: "administrator" 
    // other fields below 
} 

從那裏當然,你可以發佈的具體數據,或啓用基於accountType的價值是你的網站的不同部分。

例如,如果我想的管理員能夠訂閱,並查看所有用戶的信息:

Meteor.publish("userData", function() { 
    if (this.userId) { 
    if (Meteor.users.find(this.userId).accountType === "admin") { 
     return Meteor.users.find(); 
    } else { 
     return Meteor.users.find(this.userId); 
    } 
    } else { 
    this.ready(); 
    } 
}); 
1

這不是測試,而是從第一次看,這可能是一個可行的方法更改用戶集合的名稱。將此代碼放置在/ lib文件夾中的某處:

Accounts.users = new Mongo.Collection("another_users_collection", { 
    _preventAutopublish: true, 
}); 

Meteor.users = Accounts.users; 
+1

我測試它,它出乎意料地工作幾乎沒有問題。唯一不能用於我的原型的是Meteor.user(),因此我將「new Mongo.Coll ...」分配給一個變量,然後將該變量分配給Accounts.users,並將其導出以便在其中使用它我需要手動調用這個集合的其他地方。非常感謝。 – 2016-07-30 18:24:55