2015-09-01 65 views
3

我現在用的是MongoDB C# driver當我的應用程序啓動時創建一個索引MongoDB的C#驅動程序 - 創建索引

,它創建的指標如下

await collection.Indexes.CreateOneAsync(new BsonDocument("code", 1), new CreateIndexOptions() { Unique = true, Sparse = true }); 

我的問題是這樣的:如果該指數已經存在,索引不會再被重新創建/索引,對嗎?

+1

只要一切都是一樣的,不應該創建一個新的,但它本來是**很容易試試,多次創建索引然後列出它們? – Jcl

回答

1

是的。

只要參數不改變(例如"code"變得"Code"Sparse變得false)的指數將不會重新創建和操作將是一個空操作。

+1

因此,當使用DI容器和存儲庫模式創建web api時,索引創建的最佳時機是什麼? 也許在倉庫的構造函數中?但是,由於存儲庫具有HTTP請求的生命週期,因此需要爲每個傳入請求發送CreateIndex命令。當然,在99%的情況下它將無法使用,但仍然 - 這不是一種矯枉過正的行爲嗎? – lukpep

+0

@lukpep在哪裏是web api託管。在整個使用壽命期間通常都會有活動。只需在服務器啓動一次時調用createIndex。下一次啓動服務器時,它將成爲禁用狀態。 – i3arnon

+0

我正在使用ms azure。我正在考慮在我的mongo模塊的初始配置中進行配置(約定註冊等),但我不喜歡每次創建新的域存儲庫時都必須記住去mongo配置模塊並添加索引。我會很方便地以某種方式在倉庫中註冊所需的索引。也許autofac可以從程序集中獲取所有實現某個標記接口IMongoRepository的類,並查找在初始啓動時註冊的靜態數組idexes? – lukpep

相關問題