我有一个模型票据和一个模型任务。
public class Ticket
{
[BsonId] public string _idTicket {get; set;}
public List<Task> _tasks {get; set;}
}
public class Task
{
[BsonId] public string _idTask {get; set;}
}
如何建立一对多的关系?是在Task模型中加入_idTicket,还是有一个方法可以让mongodb驱动自动完成。
你可以将模型嵌入到其他模型中,当这个模型被序列化时,它将成为根文档的一个子文档。以下面的C#类为例。
class Ticket
{
public ObjectId Id { get; set; }
public string Name { get; set; }
public Task[] Tasks { get; set; }
}
class Task
{
public string Name { get; set; }
}
当我们用C#把一些文档插入到MongoDB中时
var client = new MongoClient();
var database = client.GetDatabase("test");
var collection = database.GetCollection<Ticket>("tickets");
await collection.InsertOneAsync(new Ticket
{
Name = "Ticket-1",
Tasks = new[]
{
new Task{Name = "Task-A"},
new Task{Name = "Task-B"},
}
});
await collection.InsertOneAsync(new Ticket
{
Name = "Ticket-2",
Tasks = new[]
{
new Task{Name = "Task-C"},
new Task{Name = "Task-D"},
new Task{Name = "Task-E"},
}
});
我们在MongoDB控制台中会看到它们的内容如下。
db.tickets.find().pretty()
{
"_id" : ObjectId("5ed8f4d34602cb605c3f8d72"),
"Name" : "Ticket-1",
"Tasks" : [
{
"Name" : "Task-A"
},
{
"Name" : "Task-B"
}
]
}
{
"_id" : ObjectId("5ed8f4d34602cb605c3f8d73"),
"Name" : "Ticket-2",
"Tasks" : [
{
"Name" : "Task-C"
},
{
"Name" : "Task-D"
},
{
"Name" : "Task-E"
}
]
}
如你所见,我们不需要在任务中使用外键 因为它已经属于它所属的票据。