Вставка элементов в словарь в MongoDB через C # - PullRequest
0 голосов
/ 27 апреля 2018

Я не могу перевести рабочие команды оболочки Mongo в код C #. В частности, я хотел бы вставить новый элемент в словарь, используя представление ArrayOfDocument или ArrayOfArray. В приведенном ниже примере я хотел бы вставить новый класс в свой класс учеников.

C # Ученик класса

[BsonId]
public string Name;
[BsonDictionaryOptions(DictionaryRepresentation.ArrayOfDocuments)]
public Dictionary<string, int> Grades;

Монго работает с оболочкой

db.myPupils.update( {"_id":"Tom"}, {$addToSet: {"Grades": {"k":"Math","v":5}}})

Однако в C # я получаю «Определенное приведение неверно» Синтаксис Linq делает свое дело .

var kvp = new KeyValuePair<string, int>("Math",5);
var res = collection.UpdateOne(
        Builders<Pupil>.Filter.Eq("_id", "Tom"),
        //Builders<Pupil>.Update.AddToSet("Grades", kvp.ToBsonDocument()));
        Builders<Pupil>.Update.AddToSet(k => k.Grades, kvp));

Я тоже попробовал то же самое, используя ArrayOfArrays, оболочка Mongo снова работает нормально:

db.myPupils.update( {"_id":"Tom"}, {$addToSet: {"Grades": ["Math",5]}})

C # дает "Сериализатор для поля" Оценки "должен реализовывать IBsonArraySerializer и предоставлять информацию о сериализации элемента."

var res = collection.UpdateOne(
        Builders<Pupil>.Filter.Eq("_id", "Tom"),
        Builders<Pupil>.Update.AddToSet("Grades", new BsonArray{"Math",5});

Что мне не хватает? Большое спасибо за вашу помощь.

Обновление

Для ArrayOfDocuments синтаксис Linq делает свое дело. Хотя бит ArrayOfArrays все еще не увенчался успехом ...

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