我正在嘗試實現簡單的功能,以允許Meteor應用程序檢查某個MongoDB字符串是否可以成功用於連接。爲了做到這一點,我有一個事件觸發了一個服務器方法,該方法建立到MongoDB的連接並返回集合內的文檔數量。 我正在使用的(簡化)方法使用了mongo連接字符串和集合名稱,並返回集合中文檔的數量。我如何取消註冊流星收藏?
var mongoUrl = "mongodb://user:[email protected]:27017/mydb";
var collectionName = "test";
Meteor.methods({
testDbConnection: function(mongoUrl, collectionName) {
var database = new MongoInternals.RemoteCollectionDriver(mongoUrl);
TestCollection = new Mongo.Collection(collectionName, { _driver: database });
var numberOfDocs = TestCollection.find().count();
// HELP: how to unregister TestCollection?
return numberOfDocs;
}
});
方法的第一次調用工作,但因爲我還沒有註冊的TestCollection
所有後續調用失敗,因爲流星已經有定義的test
集合的insert
方法。
Exception while invoking method 'testDbConnection' Error: A method named '/test/insert' is already defined
at packages/ddp/livedata_server.js:1444:1
at Function._.each._.forEach (packages/underscore/underscore.js:113:1)
at [object Object]._.extend.methods (packages/ddp/livedata_server.js:1442:1)
at [object Object].Mongo.Collection._defineMutationMethods (packages/mongo/collection.js:886:1)
at new Mongo.Collection (packages/mongo/collection.js:208:1)
at [object Object].Meteor.methods.testDbConnection (app/app.js:55:24)
at maybeAuditArgumentChecks (packages/ddp/livedata_server.js:1599:1)
at packages/ddp/livedata_server.js:648:1
at [object Object]._.extend.withValue (packages/meteor/dynamics_nodejs.js:56:1)
at packages/ddp/livedata_server.js:647:1
如何註銷流星中的集合以執行這些特定數據庫連接?
既然創建一個'Collection'不僅僅提供了一個接口到mongo集合,那麼對於那些簡單的即席查詢,使用'MongoInternals'還是使用npm'mongodb'你最好嗎? – MasterAM 2015-02-07 15:18:11
事實上,它確實很好地使用了 'var numberOfDocs = database.open(collectionName).find()。count();'但對我來說問題依然存在。 – Stephan 2015-02-07 15:39:29