通过C#将项目插入MongoDB中的字典

时间:2018-04-27 07:04:40

标签: c# mongodb mongodb-query mongodb-.net-driver

我无法将工作的Mongo shell命令转换为C#代码。具体来说,我想使用ArrayOfDocument或ArrayOfArray表示将新项插入到字典中。在下面的示例中,我想在我的Pupil课程中插入一个新成绩。

C#Pupil课程

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

Mongo shell工作

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

但是在C#中我得到&#34;特定演员表无效&#34; 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 shell再次正常运行:

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

C#给出&#34;字段序列化器&#34;成绩&#34;必须实施IBsonArraySerializer并提供项目服务信息。&#34;

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

我错过了什么?非常感谢您的帮助。

更新

对于ArrayOfDocuments,Linq语法可以解决问题。尽管如此,ArrayOfArrays位仍然没有成功......

0 个答案:

没有答案