Mongo Go Driver Count () метод получает «Неверный ответ от сервера, поле значения не является числом» из Azure CosmosDB MongoDB Api Count () - PullRequest
0 голосов
/ 05 июля 2019

Я использую Azure Cosmos DB с MongoDB Api в своем проекте, разработанном с помощью Golang и MongoDB Go Drivers.Когда я пытаюсь получить счет с помощью приведенного ниже кода, выдается ошибка Invalid response from server, value field is not a number

itemCount, err := myCollection.CountDocuments(ctx, bson.D{{"$and", bson.A{bson.M{"userid": user.ID, "siteid": site.ID}}}})

Этот же код возвращает количество элементов (в данном случае 532), когда я пытался выполнить его в базе данных MongoDB.Затем я решил попробовать тот же запрос, написав простое приложение .Net, которое отлично работало как с MongoDB, так и с CosmosDB.Ниже приведен код, который я использовал, и он напечатал 532 для обеих баз данных.

var count = database.GetCollection<Model>("myCollection").CountDocuments(filter);
Console.WriteLine(count);

Я также попытался запросить обе базы данных через Robo3T.Запрос db.getCollection('Consents').count({}) возвратил 532 из MongoDB, в то время как тот же запрос возвратил NumberLong(532) из CosmosDB.

Я написал это поведение на форумах MSDN, но никто не полагался.Я даже не уверен, если это проблема API базы данных или драйвера.В случае драйвера это работает с MongoDB, и это то, что он обещал мне сделать.В случае API базы данных он работает с драйверами .Net и говорит мне, что Microsoft хорошо осведомлена об этом поведении и считает его приемлемым и обрабатывает его в своих драйверах.У кого-нибудь есть идеи, как преодолеть эту ситуацию?

1 Ответ

0 голосов
/ 07 июля 2019

ваш фильтр должен быть:

itemCount, err := myCollection.CountDocuments(ctx, bson.M{"userid": user.ID, "siteid": site.ID})

bson.M будет выполнять неявные $ и

...