gpt4 book ai didi

c# - 更新 MongoDB 中嵌套实体数组中的属性

转载 作者:IT老高 更新时间:2023-10-28 13:18:26 24 4
gpt4 key购买 nike

是否有一种直接的方式来更新 MongoDB 中的嵌套实体数组。我正在使用 MongoDB C# Driver 从应用程序进行数据库调用。下面是一个例子:假设我有一个 Student 集合,其中每个文档都有一个嵌套的 Course 数组,其中填充了一些必要的字段,并且 Course 本身是一个单独的集合,如:

{
"_id": "234dssfcv456",
"Name": "Jean Douglas",
"Age": 32,
"Courses":
[
{
"_id": "1234",
"Name": "Computer Science",
"Level": "Basic"
},
{
"_id": "3456",
"Name": "Bio Science",
"Level": "Intermediate"
}
]
}

我知道我可以通过索引更新嵌套实体,如下所示,但我不知道索引,而只知道嵌套的 Course 对象 Id

db.College.Student.update(
{"Student._id": "234dssfcv456"},
{$set: {
"Student.$.Courses.1.Level": "Basic"
}}

现在,正在阅读整个嵌套的类(class)数组 -> 在应用程序端进行修改 -> 然后将整个数组传递给更新的文件名 "Courses" ,它将替换现有数组,其中一个已通过。

但我在想,有没有一种方法可以使用可用的 Id 更新数组中的一个实体。请提出建议。

*** 在 Related 问题部分的右侧,所有显示使用对象项的 index 更新嵌套的对象数组,这对我来说是不可能的.

最佳答案

蒙古壳:

> db.students.find( {_id:"234dssfcv456", "Courses._id":"1234"} ).pretty()
> db.students.update( {_id:"234dssfcv456", "Courses._id":"3456"}, { $set: { "Courses.$.Level" : "Updated" } } )

C# Mongo 架构:

public class Student {
[BsonId]
[BsonRepresentation(BsonType.String)]
public string Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public Course[] Courses { get; set; }
}

public class Course {
[BsonId]
[BsonRepresentation(BsonType.String)]
public string Id { get; set; }
public string Name { get; set; }
public string Level { get; set; }
}

查找 positional operator 的 Mongo 文档。我正在使用高于 2.2.3.3 版本的驱动程序:

  var _client = new MongoClient(@"....");
var _database = _client.GetDatabase("...");
var _students = _database.GetCollection<Student>("students");

var filter = Builders<Student>.Filter;
var studentIdAndCourseIdFilter = filter.And(
filter.Eq(x => x.Id, "234dssfcv456"),
filter.ElemMatch(x => x.Courses, c => c.Id == "1234") );
// find student with id and course id
var student = _students.Find(studentIdAndCourseIdFilter).SingleOrDefault();

// update with positional operator
var update = Builders<Student>.Update;
var courseLevelSetter = update.Set("Courses.$.Level", "Updated Level");
_students.UpdateOne(studentIdAndCourseIdFilter, courseLevelSetter);

关于c# - 更新 MongoDB 中嵌套实体数组中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38839260/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com