Перейти к содержанию

Использование MongoDB

Основная база данных, которая используется в Amethyst - MongoDB. Amethyst предоставляет удобное и быстрое использование этой базы данных.

Чтобы использовать эту базу данных, необходимо создать класс, который наследует DataModel.

Модель (DataModel) - это структура данных.

К примеру, базовая модель выглядит так:

using Amethyst.Storages.Mongo;
using MongoDB.Bson.Serialization.Attributes;

[BsonIgnoreExtraElements]
public sealed class MyModel : DataModel
{
    public static MongoModels<MyModel> Models { get; } = MongoDatabase.Main.Get<MyModel>();

    public MyModel(string name) : base(name)
    {
        TestField = $"TestField: {name}";
    }

    public int TestField;
    public bool TestField2;
    public string TestField3;

    public override void Save()
    {
        Models.Save(this);
    }

    public override void Remove()
    {
        Models.Remove(Name);
    }
}

DataModel имеет primary-key Name (название, по которому модель сохраняется в БД).

Amethyst не позволяет иметь несколько моделей под одним названием.

Name устанавливается в конструкторе:

public CharacterModel(string name) : base(name)

Базовые методы DataModel:

  • Метод Save - сохраняет модель в базу данных
  • Метод Remove - удаляет модель из базы данных.

Базовые свойства DataModel:

  • Свойство Name - primary-key.

Класс MongoDatabase

MongoDatabase - класс, обертка над определенной базы данных в MongoDB.

Экземпляр основной базы данных (которая установлена в конфиге) находится в MongoDatabase.Main.

Чтобы подключиться к другой базе данных, можно использовать конструктор:

MongoDatabase mainDb = MongoDatabase.Main;

// подключается к MongoDB по адресу который указан в конфиге, но использует другую базу данных в MongoDB.
MonogDatabase alternateDb = new MongoDatabase(
        AmethystSession.StorageConfiguration.MongoConnection,
        "AlternateDB");

// подключается к базе данных по alternateIP : 27017 
MonogDatabase alternateDb = new MongoDatabase(
        "mongodb://alternateIP:27017/",
        "AnotherAlternateDB");

Класс MongoModels

MongoModels<T> - класс, обертка над MongoDB. Именно через этот класс происходят все манипуляции с определенной коллекцией в БД.

Например для SSC-персонажей (CharacterModel) существует MongoModels<CharacterModel>, экземпляр которого находится в PlayerManager.Characters.

Чтобы получить экземпляр для вашей модели, используйте Get<T> в MongoDatabase:

MongoDatabase mainDb = MongoDatabase.Main;

MongoModels<MyModel> models = mainDb.Get<MyModel>();

Как сказано выше, через класс MongoModels<T> проходят все манипуляции с коллекцией в базе данных:

MongoDatabase mainDb = MongoDatabase.Main;
MongoModels<MyModel> models = mainDb.Get<MyModel>();

MyModel model = new MyModel("MyModelName");
MyModel model2 = new MyModel("ModelName2");

// добавляет или перезаписывает модель
// т.е. если модель с таким названием уже есть в БД, Amethyst перезапишет его.
models.Save(model);

model.TestField = 5;
models.Save(model);

model.TestField = 10;
models.Save(model);

// удаляет модель
bool wasRemoved = models.Remove("MyModelName");
bool wasRemoved = models.Remove(model.Name);
bool wasRemoved = models.Remove(predicate => predicate.Name.StartsWith("M"));

// ищет модель
// если модели нет в БД, возвращает null
// если есть - возвращает модель из БД.
MyModel? model3 = models.Find("MyModelName");