Как подключиться к Cosmos MongoDB

#c# #mongodb #asp.net-core #azure-cosmosdb

#c# #mongodb #asp.net-ядро #azure-cosmosdb

Вопрос:

Я создал локальный экземпляр Cosmos и настроил MongoDB для своего приложения на c # на основе этой статьи

Однако при попытке получить данные кажется, что они зависают навсегда

Неясно, что должна содержать моя строка подключения, но я заполнил ее этим:

 "ClientDataRepositoryConfiguration": {
    "CollectionName": "ClientData",
    "ConnectionString": "mongodb://localhost:C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==@localhost:10255/admin?ssl=true",
    "DatabaseName": "ClientData"
 },
  

Кто-нибудь может посоветовать, правильно ли я ввел это?

Вот как выглядит мой космос:

введите описание изображения здесь

Где у меня есть база данных с именем clientData, в которой есть контейнер с именем clientData.


Конечная точка контроллера

 [HttpGet("Test")]
public async Task<IActionResult> TestGet()
{
    // I can hit breakpoint here, it hangs when waiting for `GetallAsync`
    var result = await _clientDataRepository.GetAllAsync();
    return Json(result); 
}
  

Репозиторий

 internal sealed class ClientDataRepository : IClientDataRepository
{
    private readonly IMongoCollection<ClientData> _clientDatas;

    public ClientDataRepository(
        IClientDataRepositoryConfiguration configuration)
    {
        var client = new MongoClient(configuration.ConnectionString);
        var database = client.GetDatabase(configuration.DatabaseName);

        _clientDatas = database.GetCollection<ClientData>(configuration.CollectionName);
    }

    public async System.Threading.Tasks.Task<List<ClientData>> GetAllAsync(CancellationToken cancellationToken) 
        => await _clientDatas
            .Find(i => true)
            .ToListAsync(cancellationToken);
}
  

Комментарии:

1. в чем ошибка?

2. @Sajeetharan Время ожидания просто истекает при попытке получить данные из mongo

3. вы пробовали отладку и проверяли, создан ли клиент? можете ли вы также опубликовать код?

4. @Sajeetharan Да, клиент определенно создан, и он пытается получить данные. Отправит код через секунду

5. @Sajeetharan Я добавил код для своего контроллера и репозитория

Ответ №1:

Эмулятор Cosmos не поддерживает Data Explorer, за исключением SQL API, как указано здесь . Вероятно, вы создали коллекцию с помощью SQL API.

Вы можете разрабатывать приложения с помощью эмулятора Azure Cosmos с учетными записями SQL, Cassandra, MongoDB, Gremlin и Table API. В настоящее время проводник данных в эмуляторе полностью поддерживает просмотр только данных SQL; данные, созданные с помощью клиентских приложений MongoDB, Gremlin / Graph и Cassandra, в настоящее время недоступны для просмотра.

введите описание изображения здесь

Либо вы можете создать свою коллекцию и базу данных с помощью кода (не проводника данных), либо вы можете использовать mongod команду из локальной установки mongodb.

Если вместо этого вы используете mongod tool, строка подключения должна выглядеть так mongodb://localhost:<port> , как указано в документации. Порт по умолчанию 27017 для mongod инструмента.

 "ClientDataRepositoryConfiguration": {
    "CollectionName": "ClientData",
    "ConnectionString": "mongodb://localhost:27017",
    "DatabaseName": "ClientData"
 },
  

Другой вариант — использовать ресурс Azure вместо локального.

Комментарии:

1. Итак, вы говорите, что у меня нет возможности создать базу данных mongo из проводника данных эмулятора cosmos?

2. Хороший, его сбивает с толку, потому что при просмотре данных под SQL API ним отображается как объект json

3. SQL API также показывает json, поскольку хранилище данных не содержит документов sql. SQL API не означает SQL table :), это скорее SQL-подобный синтаксис, который можно использовать для запроса документов.