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。它是查询中匹配的对象的索引。
我想编辑 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。它是查询中匹配的对象的索引。