Я не могу перевести рабочие команды оболочки 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 все еще не увенчался успехом ...