private static void Main()
        {
            MongoInitializer = new MongoInitializer();

            var user = new User
            {
                Id = MongoInitializer.SampleDb.Users.NewId()
            };

            MongoInitializer.SampleDb.Users.InsertOne(user);
            MongoInitializer.SampleDb.Articles.InsertOne(new Article
            {
                AuthorId = user.Id
            });

            var article = MongoInitializer.SampleDb.Articles.AsQueryable().First(x => x.AuthorId == user.Id);

            MongoInitializer.SampleDb.Articles.UpdateById(article.Id, x => x.PushEach(a => a.Comments, new List <Comment>
            {
                new Comment(),
                new Comment
                {
                    UserId = user.Id
                }
            }));

            MongoInitializer.SampleDb.Articles.UpdateArrayById(article.Id,
                                                               x => x.Comments,
                                                               QueryExtensions.EQ <Comment>(a => a.UserId, user.Id),
                                                               (builder, array) => builder.Set(array, c => c.Text, "new text"));

            var count = new GetUserCommentsCountCommand(MongoInitializer).ByArticle(article.Id, user.Id);

            Console.WriteLine(count);
        }
Beispiel #2
0
        private void InitializeDatabase()
        {
            var db = Services.GetRequiredService <IMongoDatabase>();

            MongoInitializer.RegisterClassMaps();
            MongoInitializer.CreateSchemaAsync(db).GetAwaiter().GetResult();
        }
Beispiel #3
0
        public SnippetsRepository(IOptions <MongoConfig> config)
        {
            _config = config;

            _client     = MongoInitializer.Init(_config.Value.ConnectionString);
            _database   = _client.GetDatabase(DatabaseName);
            _collection = _database.GetCollection <SnippetDto>(CollectionName);
        }
        public static IRepositoryProvider Initialize(SupportedPersistenceType type)
        {
            switch (type)
            {
            case SupportedPersistenceType.MongoDB:
                return(MongoInitializer.Initialize("mongodb://localhost:27017", "Scrummy"));

            default:
                throw new ArgumentOutOfRangeException(nameof(type), type, null);
            }
        }
        private static async Task <bool> InitMongoDbAsync(IMongoDatabase db)
        {
            var cursor = await db.ListCollectionNamesAsync();

            var collections = await cursor.ToListAsync();

            bool collectionsExist = collections.Count > 2;

            if (!collectionsExist)
            {
                await MongoInitializer.CreateSchemaAsync(db);
            }

            return(!collectionsExist);
        }
Beispiel #6
0
        public void Test1()
        {
            MongoInitializer.Run(Settings.connectionString,
                                 Settings.dbName,
                                 Settings.assemblyName);

            DbConnection.SetDB(Settings.connectionString,
                               Settings.dbName);
            var db          = DbConnection.db;
            var collections = db.ListCollections().ToList <BsonDocument>().Select(e => e["name"].AsString);

            Assert.Contains("Model1", collections);
            Assert.Contains("model3", collections);
            Assert.Contains("ModelFooBar4", collections);
        }
        /// <summary>
        /// Adds MongoDB services to the app's service collection
        /// </summary>
        public static void AddMongoDb(
            this IServiceCollection services,
            IConfigurationSection mongoSection
            )
        {
            string connectionString = mongoSection.GetValue <string>(nameof(MongoOptions.ConnectionString));

            if (string.IsNullOrWhiteSpace(connectionString))
            {
                throw new ArgumentException($@"Invalid MongoDB connection string: ""{connectionString}"".");
            }

            services.Configure <MongoOptions>(mongoSection);

            string dbName = new ConnectionString(connectionString).DatabaseName;

            services.AddSingleton <IMongoClient, MongoClient>(_ => new MongoClient(connectionString));
            services.AddTransient(provider =>
                                  provider.GetRequiredService <IMongoClient>().GetDatabase(dbName)
                                  );

            services.AddTransient <IAgencyRepo, AgencyRepo>();
            services.AddTransient(provider =>
                                  provider.GetRequiredService <IMongoDatabase>().GetCollection <Agency>("agencies")
                                  );

            services.AddTransient <IRouteRepo, RouteRepo>();
            services.AddTransient(provider =>
                                  provider.GetRequiredService <IMongoDatabase>().GetCollection <Route>("routes")
                                  );

            services.AddTransient <IBusStopRepo, BusStopRepo>();
            services.AddTransient(provider =>
                                  provider.GetRequiredService <IMongoDatabase>().GetCollection <BusStop>("bus_stops")
                                  );

            services.AddTransient <IUserProfileRepo, UserProfileRepo>();
            services.AddTransient(provider =>
                                  provider.GetRequiredService <IMongoDatabase>().GetCollection <UserProfile>("users")
                                  );

            services.AddTransient <IBusPredictionRepo, BusPredictionRepo>();
            services.AddTransient(provider =>
                                  provider.GetRequiredService <IMongoDatabase>().GetCollection <BusPrediction>("bus_predictions")
                                  );

            MongoInitializer.RegisterClassMaps();
        }
Beispiel #8
0
        /// <summary>
        /// Initializes the MongoDB database. Recreates the database, if exists, and creates its schema
        /// </summary>
        private static async Task <IMongoDatabase> InitializeDatabase()
        {
            var settings         = new Settings();
            var connectionString = new ConnectionString(settings.ConnectionString);

            var clientSettings = MongoClientSettings.FromConnectionString(settings.ConnectionString);

            clientSettings.ClusterConfigurator = ClientSettingsClusterConfigurator;

            var client = new MongoClient(clientSettings);

            await client.DropDatabaseAsync(connectionString.DatabaseName);

            var db = client.GetDatabase(connectionString.DatabaseName);

            await MongoInitializer.CreateSchemaAsync(db);

            return(db);
        }
Beispiel #9
0
        public static void EnsureDatabaseSchema(
            this IApplicationBuilder app
            )
        {
            var logger = app.ApplicationServices.GetRequiredService <ILogger <Startup> >();

            using (IServiceScope scope = app.ApplicationServices.CreateScope())
            {
                var database    = scope.ServiceProvider.GetRequiredService <IMongoDatabase>();
                var collections = database.ListCollectionNamesAsync().Result.ToListAsync().Result;
                if (collections.Contains("agencies"))
                {
                    logger.LogDebug("Database already has the \"agencies\" collection. Skipping.");
                }
                else
                {
                    logger.LogInformation("Creating the database schema");
                    MongoInitializer.CreateSchemaAsync(database).GetAwaiter().GetResult();
                }
            }
        }
        /// <summary>
        /// Adds MongoDB services to the app's service collection
        /// </summary>
        public static void AddMongoDb(
            this IServiceCollection services,
            IConfigurationSection dataSection
            )
        {
            string connectionString = dataSection.GetValue <string>(nameof(MongoOptions.ConnectionString));

            if (string.IsNullOrWhiteSpace(connectionString))
            {
                throw new ArgumentException($@"Invalid MongoDB connection string: ""{connectionString}"".");
            }

            services.Configure <MongoOptions>(dataSection);

            string dbName = new ConnectionString(connectionString).DatabaseName;

            services.AddSingleton <IMongoClient, MongoClient>(_ => new MongoClient(connectionString));
            services.AddTransient <IMongoDatabase>(provider =>
                                                   provider.GetRequiredService <IMongoClient>().GetDatabase(dbName)
                                                   );

            services.AddTransient <IMongoCollection <UserEntity> >(_ =>
                                                                   _.GetRequiredService <IMongoDatabase>()
                                                                   .GetCollection <UserEntity>("users")
                                                                   );
            services.AddTransient <IMongoCollection <TaskList> >(_ =>
                                                                 _.GetRequiredService <IMongoDatabase>()
                                                                 .GetCollection <TaskList>("task-lists")
                                                                 );
            services.AddTransient <IMongoCollection <TaskItem> >(_ =>
                                                                 _.GetRequiredService <IMongoDatabase>()
                                                                 .GetCollection <TaskItem>("task-items")
                                                                 );

            services.AddTransient <IUserRepository, UserRepository>();
            services.AddTransient <ITaskListRepository, TaskListRepository>();
            services.AddTransient <ITaskItemRepository, TaskItemRepository>();

            MongoInitializer.RegisterClassMaps();
        }
Beispiel #11
0
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;

            // DB接続確立
            var dbName = "blog";

            DbConnection.Connect(configuration.GetValue <string>("MONGO_CONNECTION"), dbName);

            // 宣言されたモデルからDBにコレクションを作る
            MongoInitializer.Run(DbConnection.Db, "tetsujin");

            // ユーザパスワードのハッシュキー
            Session.Hashkey = configuration.GetValue <string>("HASHKEY");

            var storageAccount = configuration.GetValue <string>("STORAGE_ACCOUNT");
            var storageKey     = configuration.GetValue <string>("STORAGE_KEY");
            var storageUrl     = configuration.GetValue <string>("STORAGE_URL");

            BlobFile.SetAccountInfo(storageAccount, storageKey, storageUrl);

            buildTime = configuration.GetValue <string>("BUILD_TIME");
        }
Beispiel #12
0
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllersWithViews();
            services.AddRazorPages();

            // mongodb
            var connectionName = ISDEVELOPER ? "MongoNetWork" : "MongoAtlas";

            var mongoSettings = Configuration.GetSection(connectionName).Get <MongoSettings>();

            // collections
            services.AddSingleton <IMongoService <Book> >(MongoInitializer.Initialize <Book>(mongoSettings));

            // Swagger (by ilustration)
            if (ISDEVELOPER)
            {
                services.AddSwaggerGen(c => {
                    c.SwaggerDoc("v1", new OpenApiInfo {
                        Title   = "Blazor Mongo API",
                        Version = "v1"
                    });
                });
            }
        }
 private async Task SetupMongo_WithAuth()
 {
     MongoService = MongoInitializer.Initialize(DatabaseName, _schemaTypes);
     await Task.Delay(Delay);
 }
Beispiel #14
0
        private async Task InitDbAsync()
        {
            MongoInitializer.RegisterClassMaps();

            var db = Services.GetRequiredService <IMongoDatabase>();
            var agencyCollection = db.GetCollection <BsonDocument>("agencies");
            var routeCollection  = db.GetCollection <BsonDocument>("routes");

            long docsCount = await agencyCollection.CountDocumentsAsync(FilterDefinition <BsonDocument> .Empty);

            if (docsCount > 0)
            {
                return;
            }

            await MongoInitializer.CreateSchemaAsync(db);

            await agencyCollection.InsertManyAsync(new[]
            {
                // Test Agency from NextBus
                BsonDocument.Parse(@"{
                    tag: ""configdev"",
                    created_at: new Date(),
                    title: ""Config Stuff"",
                    region: ""Other"",
                    country: ""Test"",
                    max_lat: 39.3075428,
                    max_lon: -76.5711916,
                    min_lat: 38.9488713,
                    min_lon: -77.211631
                }"),

                // Single TTC agency for Toronto
                BsonDocument.Parse(@"{
                    tag: ""ttc"",
                    created_at: new Date(),
                    title: ""Toronto Transit Commission"",
                    region: ""Ontario"",
                    country: ""Canada"",
                    short_title: ""Toronto TTC"",
                    max_lat: 43.9095299,
                    max_lon: -79.12305,
                    min_lat: 43.5918099,
                    min_lon: -79.6499
                }"),

                // 3 Agencies for Los Angles
                BsonDocument.Parse(@"{
                    tag: ""lametro"",
                    created_at: new Date(),
                    title: ""Los Angeles Metro"",
                    region: ""California-Southern"",
                    country: ""USA"",
                    max_lat: 34.3261599,
                    max_lon: -117.9134699,
                    min_lat: 33.70685,
                    min_lon: -118.86091
                }"),
                BsonDocument.Parse(@"{
                    tag: ""lametro-rail"",
                    created_at: new Date(),
                    title: ""Los Angeles Rail"",
                    region: ""California-Southern"",
                    country: ""USA"",
                    max_lat: 34.1684999,
                    max_lon: -117.89164,
                    min_lat: 33.7680699,
                    min_lon: -118.49138
                }"),
                BsonDocument.Parse(@"{
                    tag: ""pvpta"",
                    created_at: new Date(),
                    title: ""Palos Verdes Transit"",
                    region: ""California-Southern"",
                    country: ""USA"",
                    max_lat: 33.81904,
                    max_lon: -118.28767,
                    min_lat: 33.7273099,
                    min_lon: -118.42314
                }"),
            });

            await routeCollection.InsertManyAsync(new[]
            {
                // routes for TTC
                BsonDocument.Parse(@"{
                    tag : ""6"",
                    agency : ""ttc"",
                    created_at : new Date(),
                    title : ""6-Bay"",
                    max_lat : 43.6761999,
                    min_lat : 43.64152,
                    max_lon : -79.36538,
                    min_lon : -79.40196,
                    directions : [
                        {
                            tag : ""6_0_6A"",
                            title : ""South - 6 Bay towards Queens Quay and Sherbourne"",
                            name : ""South"",
                            stops : [ ""264"", ""4165"", ""1642"", ""2410"", ""7542"" ]
                        },
                        {
                            tag : ""6_1_6A"",
                            title : ""North - 6a Bay towards Dupont"",
                            name : ""North"",
                            stops : [ ""14935"", ""4166"", ""14936"", ""14569"", ""5092"" ]
                        }
                    ]
                }"),
                BsonDocument.Parse(@"{
                    tag : ""34"",
                    agency : ""ttc"",
                    created_at : new Date(),
                    title : ""34-Eglinton East"",
                    max_lat : 43.7368499,
                    min_lat : 43.7047599,
                    max_lon : -79.24785,
                    min_lon : -79.4001099,
                    directions : [
                        {
                            tag : ""34_1_34Akes"",
                            title : ""West - 34a Eglinton East towards Eglinton Station"",
                            name : ""West"",
                            stops : [ ""2463"", ""317"", ""4194"", ""8550"", ""15211"" ]
                        },
                        {
                            tag : ""34_0_34C"",
                            title : ""East - 34c Eglinton East towards Flemingdon Park (Grenoble & Spanbridge)"",
                            name : ""East"",
                            stops : [ ""14191"", ""303"", ""24060"", ""6665"", ""24061"" ]
                        }
                    ]
                }"),
            });
        }
Beispiel #15
0
 /// <summary>
 /// Registers mapping from entity class types to MongoDB schema
 /// </summary>
 static DatabaseFixture()
 {
     MongoInitializer.RegisterClassMaps();
 }