Rau*_*auf 3 mongodb mongodb-.net-driver
我想Mongo使用在嵌套集合中添加一个新对象C# drivers,请在下面的示例 json 中找到。
我有类似下面的称为学生的集合。
{
"_id" : ObjectId("5a866be6f843b648a0bac9ab"),
"FIstName" : "Bob",
"LastName" : "mark",
"MarkList" : [
{
"SUbject" : "science",
"Mark" : "80",
"Rank" : "10",
}
],
}
Run Code Online (Sandbox Code Playgroud)
现在我想使用 C# 驱动程序在 Marklist 数组下插入一个新的主题对象,
{
"SUbject" : "Physics",
"Mark" : "80",
"Rank" : "10",
}
Run Code Online (Sandbox Code Playgroud)
我还为上述属性创建了类。
请提出一些想法。
提前致谢
最简单的方法是使用$push运算符,但$addToSet也可以根据您的要求工作。
如果我们在 Mongo Shell 中构建它,你会得到类似的东西
db.students.update({"_id": ObjectId("5a866be6f843b648a0bac9ab")},
{
$push: {
"MarkList": {
"Subject": "Physics",
"Mark": 80,
"Rank": 10
}
}
})
Run Code Online (Sandbox Code Playgroud)
因此,将其转换为 C#,让我们假设您已经掌握了一些东西。
IMongoCollection<T>对象叫studentsColT集合中的类型是StudentstudentIdnewMark在这种情况下,以下代码将完成您要查找的内容。
studentsCol.UpdateOneAsync(
Builders<Student>.Filter.Eq(x => x.Id, studentId),
Builders<Student>.Update.Push(x => x.MarkList, newMark));
Run Code Online (Sandbox Code Playgroud)
如果要使用$addToSet,只需更改Update.Push为Update.AddToSet.
注意:如果您选择,$addToSet请务必阅读 MongoDB 如何确定文档是否已存在于数组中。
如果值为文档,则如果数组中存在的文档与要添加的文档完全匹配,则MongoDB确定该文档是重复的;即现有文档具有完全相同的字段和值,并且这些字段的顺序相同。因此,字段顺序很重要,您不能指定 MongoDB 仅比较文档中字段的子集来确定文档是否与现有数组元素重复。