MongoDB: 编辑数组中的元素

MongoDB: Editing Element In Array

我想编辑 collection 中多个数组中可能存在的元素。

public class Class 
{
    [BsonId]
    public Guid Id { get; set;}
    public string Name {get; set;}
    public List<Student> Students {get; set;}
}

public class Student 
{
   [BsonId]
   public Guid Id {get; set;}
   public string Name {get; set;}
   public string Grade {get; set;}
}

然后我的 class collection 看起来像

{
 "_id" : NUUID("..."),
  "Name" : "Computer Science",
  "Students" : [
       {
          "_id" : NUUID("..."),
           "Name" : "Chris"
           "Grade" : "A"
       },
       {
          "_id" : NUUID("..."),
           "Name" : "Bob"
           "Grade" : "B"
       }
}

我的学生 collection 看起来像

{
  "_id" : NUUID("..."),
  "Name" : "Chris Eastwood"
  "Grade": "C
}

现在,当学生更新他的信息时,我希望他的信息在每个 class 中更新。

我正在尝试做:

// given student that has been edited

var query = Query.EQ("Students._id", student.Id);
var update = Update<Class>
    .Pull(c => c.Students, x => x.EQ(q => q.Id, student.Id))
    .Push(c => c.Students, student)

Context.Class.Update(query,update,UpdateFlags.Multi);

但这行不通,因为你 "cannot update Students and Students at the same time"

我想知道有没有一种方法可以为包含该学生的每个 Class 更新每个数组中的所有学生?

谢谢!

我不熟悉 c# 驱动程序,但这是您要查找的查询:

db.classes.update({
  'Students._id': some_student_id,
}, {
  $set: {
    'Students.$.property': some_value
  }
},{
  multi: true
});

您正在寻找的关键概念是 positional $ operator。它是查询中匹配的对象的索引。