Архитектура вокруг mongodb с документом и поддокументом - PullRequest
2 голосов
/ 21 июня 2011

У меня есть приложение, которое управляет настройками C #. Итак, у меня есть документ, который выглядит так:

{
    ApplicationName: "FooApplication",
    Settings : [
          ConnectionString: "localhost@myserver.com",
          UserName: "Admin"
          Password: "Password"
        ]
    }
}
{
    ApplicationName: "BarApplication",
    Settings : [
          ConnectionString: "localhost@myserver.com",
          UserName: "Admin",
          Password: "Password",
          Special: "aaaaaaaaaaaaaa"
        ]
    }
}

Как вы видите, оба моих приложения: FooApplication и BarApplication используют одни и те же параметры, за исключением того, что в моем приложении BarApplication есть еще один параметр, который является специальным: "aaaaaaa".

В тот день, когда моя ConnectionString стала NewLocalhost@myserver.com, это хороший способ обновить поле ConnectionString в каждом документе приложения? На самом деле, я не знаю, каковы лучшие практики в моем случае, так как я новичок в использовании NoSQL-решения, такого как mongodb.

И во-вторых, я хочу вставить новое приложение, я хочу всегда вставлять некоторые настройки, такие как ConnectionString, UserName и Password, потому что они одинаковы для всех приложений, но где я могу получить эти общие настройки? С новой коллекцией GlobalSettings, где я храню общие настройки? или, например, я должен выбрать applicationName FooApplication, взять значение его общих полей, а затем скопировать его в мое новое приложение SuperApplication, которое я хочу создать?

Любой совет будет признателен.

Спасибо, ребята.

1 Ответ

1 голос
/ 21 июня 2011

Прежде всего, лучшие практики для большинства магазинов NoSql аналогичны тем, что используются в магазинах RDBMS.

Во-вторых, давайте уточним терминологию.

  • Коллекция - это то, чтоэто звучит как - собрание документов.Он аналогичен таблице.
  • Документ - это, по сути, запись в собрании.

Скорее всего, вам нужен набор настроек с кучей документов настроек, а неодин документ, содержащий все ваши настройки.

Вы должны создать POCO, который содержит ваши свойства

public class ApplicationSettings {
    public ObjectId Id {get; set;}
    public string Name {get; set;}
    public Dictionary<string, string> Settings {get; set;}
}

Теперь вы можете создать экземпляр ApplicationSettings, который можно вставить вcollection.

Вы можете выполнить запрос по идентификатору (для которого у mongo уже есть индекс по умолчанию) или по имени приложения.

Когда вы хотите выполнить обновление, вы можете обновить один документзапросив его по идентификатору или имени, или вы можете обновить все документы сразу.

Если вы используете официальный драйвер C #, это будет выглядеть примерно так:

Обновлениеодин документ

var query = Query.EQ("_id", someIdHere);
var update = Update.Set("Settings.ConnectionString", "NewLocalhost@myserver.com")
collection.Update(query, update)

(Откуда вы берете свой экземпляр collection, зависит от вас.)

Ознакомьтесь с документацией для получения дополнительной информации: http://www.mongodb.org/display/DOCS/CSharp+Language+Center

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...