MongoDb 一对多映射
MongoDb one-to-many mapping
我正在尝试与 MongoDb 建立一对多关系,但坚持加入这两个集合。
我在下面做了一个例子,看看我现在是怎么做的。
// schools collection
{
_id: ObjectId("5ef206d1d21c573718ae6eda")
name: "Hogwarts School of Witchcraft and Wizardry"
}
// students collection
{
_id: ObjectId("5efed5df8b28770c2cb344b9"),
school_id: ObjectId("5ef206d1d21c573718ae6eda")
firstName: "Harry"
lastName: "Potter"
}
和.net项目中的模型类:
public class School
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
public string Name { get; set; }
public List<Student> Students { get; set; }
}
public class Student
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
[BsonRepresentation(BsonType.ObjectId)]
[Required]
public string School_id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
如何将 students
映射到 school
对象?我尝试了这些代码,但其中 none 行得通。
// 1st attempt
var q = _schools.Aggregate().Lookup<School, Student, School>(_students, school => school.Id, student
=> student.school_id, a => a.Students);
// 2nd attempt
var q = from school in _schools.AsQueryable()
join student in _students.AsQueryable() on school.Id equals student.school_id into students
select new School()
{
Students = students
};
var result = q.ToList();
我错过了什么?
实际上这两个代码片段都有效,唯一的错误是我拼错了数据库中的 school_id
值并引用了一个不存在的 School
文档。
我正在尝试与 MongoDb 建立一对多关系,但坚持加入这两个集合。 我在下面做了一个例子,看看我现在是怎么做的。
// schools collection
{
_id: ObjectId("5ef206d1d21c573718ae6eda")
name: "Hogwarts School of Witchcraft and Wizardry"
}
// students collection
{
_id: ObjectId("5efed5df8b28770c2cb344b9"),
school_id: ObjectId("5ef206d1d21c573718ae6eda")
firstName: "Harry"
lastName: "Potter"
}
和.net项目中的模型类:
public class School
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
public string Name { get; set; }
public List<Student> Students { get; set; }
}
public class Student
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
[BsonRepresentation(BsonType.ObjectId)]
[Required]
public string School_id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
如何将 students
映射到 school
对象?我尝试了这些代码,但其中 none 行得通。
// 1st attempt
var q = _schools.Aggregate().Lookup<School, Student, School>(_students, school => school.Id, student
=> student.school_id, a => a.Students);
// 2nd attempt
var q = from school in _schools.AsQueryable()
join student in _students.AsQueryable() on school.Id equals student.school_id into students
select new School()
{
Students = students
};
var result = q.ToList();
我错过了什么?
实际上这两个代码片段都有效,唯一的错误是我拼错了数据库中的 school_id
值并引用了一个不存在的 School
文档。