我无法将工作的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位仍然没有成功......