5 votes

MongoDb C# Création dynamique d'index et de collections

Je crée une collection de façon dynamique en utilisant C# (pilote MongDB). J'ai constaté que la collection n'est créée que si au moins un document y est inséré. Je procède comme suit. Puisque j'appelle CreatOne pour chaque insertion pour créer l'index, est-ce que cela va recréer l'index chaque fois que j'insère de nouveaux documents ? Existe-t-il un meilleur moyen de créer une collection et un index de façon dynamique que cette méthode ?

public static void CreatAndInsert(double value1, double value2, string collectoinName)
    {
        var connectionString = "mongodb://localhost";
        var client = new MongoClient(connectionString);
        var database = client.GetDatabase("sample");

        //Create Index
        var indexDefn = Builders<BsonDocument>.IndexKeys.Ascending("datetime");
        string collectionName = collectoinName;
        database.GetCollection<BsonDocument>(collectionName).Indexes.CreateOne(indexDefn, new CreateIndexOptions() { Background = true, Sparse = true});

        //Create Collection
        var dbcollection = database.GetCollection<BsonDocument>(collectionName);

        var document = new BsonDocument
                {
                    { "_id", ObjectId.GenerateNewId()},
                    { "Key1", value1 },
                    { "Key2", value2},
                    { "datetime", DateTime.Now }
                };

        dbcollection.InsertOne(document);
    }

2voto

Jehof Points 14720

Vous pouvez d'abord vérifier si l'index existe, avant de le créer. L'API fournit une méthode IndexExistsByName pour vérifier si un index existe ou non.

var collection = database.GetCollection<BsonDocument>(collectionName);

if (! collection.IndexExistsByName("myindex")) {
  collection.Indexes.CreateOne(indexDefn, new CreateIndexOptions() { Background = true, Sparse = true});
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X