我正在通过Plural Sight课程来深入了解MongoDB。这是“路径”的基础课程之一,它似乎是在2.0之前制作的。因此,我很难理解导师正在经历的一些科目。
我希望看看是否有人可以根据Find
澄清如何BsonID
任何对象?
这是我的目标:
public class Patient
{
[BsonElement("_id")]
[BsonId]
public string Name { get; set; }
public ICollection<Ailment> Ailments { get; set; }
public ICollection<Medication> Medications { get; set; }
}
这就是我试图查询它的方式:
public HttpResponseMessage Get(int id)
{
var patient = _patients.Find(pat => pat._id == id).ToList();
if(patient == null)
{
return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Patient Not Found..");
}
return Request.CreateResponse(HttpStatusCode.OK, patient);
}
此语法不允许我构建项目,因为没有名称为_id
的属性。我还尝试了一个实际的属性ID,但这似乎在构建时会产生某种问题(很可能是因为我已经有了一个ID,由BsonID创建)。
如果以前曾问过这个问题,我真的很抱歉,但我真的找不到任何关于这个问题的帮助。似乎应该有很多资源(即。我们的新手应该能够在搜索像“c#查询mongodb找到BsonId”)这样的东西时获得一些好的资源。
我完全明白这是否会被投票决定,但如果有时间的人可以帮助我,我真的很喜欢。
答案 0 :(得分:0)
您正在整理一个C#查询,该查询无法了解您在POCO上的属性[BsonElement("_id")]
中指定的MongoDB映射。
你想要的是
var patient = _patients.Find(pat => pat.Name == id).FirstOrDefault();
编辑(澄清):
MongoDB C#驱动程序将剖析过滤器表达式pat => pat.Name == id
,并根据POCO上的属性,它将为您创建一个MongoDB查询,使用&#34; _id&#34;字段。
答案 1 :(得分:0)
Mongo的C#驱动程序需要一个id字段(以某种方式唯一标识您的文档)。这可以通过约定来确定,也可以由您明确指定。
按照惯例,如果你有一个名为Id的ObjectId类型的公共成员的类,那么Mongo的C#驱动程序将假设这是你的id,它将被映射到Mongo集合中名为a -> b
的字段。
例如:
_id
如果您因某些原因不想使用约定(例如,如果您使用的是自然键,那么您可以使用BsonId属性告诉Mongo驱动程序您想使用其他字段/类型作为您的ID。
例如:
public class Widget
{
public ObjectId Id { get; set; }
public string Foo { get; set; }
}
或使用ObjectID以外的类型:
public class Widget
{
[BsonId]
public ObjectId WidgetId { get; set; }
public string Foo { get; set; }
}