C# 在C中基于BsonId查询MongoDb数据#

C# 在C中基于BsonId查询MongoDb数据#,c#,.net,mongodb,bson,C#,.net,Mongodb,Bson,我正在努力学习复数视觉课程,以便对MongoDB有所了解。这是“路径”上的一门基础课程,似乎是2.0之前的课程。因此,我在理解导师正在学习的一些科目时遇到了一些困难 我想看看是否有人能澄清如何根据他们的BsonID找到任何对象 这是我的目标: public class Patient { [BsonElement("_id")] [BsonId] public string Name { get; set; } public ICollection<Ailm

我正在努力学习复数视觉课程,以便对MongoDB有所了解。这是“路径”上的一门基础课程,似乎是2.0之前的课程。因此,我在理解导师正在学习的一些科目时遇到了一些困难

我想看看是否有人能澄清如何根据他们的
BsonID
找到任何对象

这是我的目标:

public class Patient
{
    [BsonElement("_id")]
    [BsonId]
    public string Name { get; set; }
    public ICollection<Ailment> Ailments { get; set; }
    public ICollection<Medication> Medications { get; set; }
}
此语法不允许我生成项目,因为没有名为
\u id
的属性。我还试图拥有一个实际的属性ID,但这似乎在构建时产生了某种问题(很可能是因为我已经有了一个由BsonID创建的ID)

如果以前有人问过这个问题,我真的很抱歉,但是我真的找不到任何关于这个问题的帮助。它似乎应该有很多资源(即,我们的新手应该能够在搜索类似“c#在BsonId上查询mongodb find”之类的内容时获得一些好的资源)


我完全理解这是否会被否决,但如果有时间的人能在这里帮助我,我会非常高兴。

您正在整理一个C查询,它不知道您在POCO的属性
[bsonement(“\u id”)]
中指定的MongoDB映射

你想要的是

var patient = _patients.Find(pat => pat.Name == id).FirstOrDefault();
编辑(澄清):

MongoDB C#driver将解析过滤器表达式
pat=>pat.Name==id
,并根据POCO上的属性为您创建一个使用“#id”字段的MongoDB查询。

Mongo的C#driver需要一个id字段(某种唯一标识文档的方法)。这可以由约定确定,也可以由您明确指定

按照惯例,如果您有一个名为Id的ObjectId类型的公共成员的类,那么Mongo的C#driver将假定这是您的Id,它将映射到Mongo集合中名为
\u Id
的字段

例如:

public class Widget
{
    public ObjectId Id { get; set; }
    public string Foo { get; set; }
}
public class Widget
{
    [BsonId]
    public ObjectId WidgetId { get; set; }
    public string Foo { get; set; }
}
如果出于某种原因(例如,如果您有一个更愿意使用的自然密钥),您不想使用约定,那么可以使用BsonId属性告诉Mongo驱动程序您想使用其他字段/类型作为您的Id

例如:

public class Widget
{
    public ObjectId Id { get; set; }
    public string Foo { get; set; }
}
public class Widget
{
    [BsonId]
    public ObjectId WidgetId { get; set; }
    public string Foo { get; set; }
}
或使用ObjectID以外的类型:

public class Widget
{
    [BsonId(IdGenerator=typeof(StringObjectIdGenerator))]
    public string WidgetId { get; set; }
    public string Foo { get; set; }
}

我认为这是正确的。如果我错了,请纠正我,但是
ObjectId
是否已被弃用?至少当我尝试使用它而不是
BsonId
时,它抛出了一个错误,告诉我在
BsonTypes
(或类似的东西)中没有具有该名称的属性。ObjectId是一种非常适合Mongo中Id属性的类型(如int或string)。。。尽管在我们最近的项目中,我们使用了Guid而不是ObjectId,因为我们不想将所有模型紧密地耦合到Mongo(以防我们想要更改持久层)。BsonId是一个属性(BsonIdAttribute),如果您不想使用默认的
public ObjectId{get;set;}
,您可以使用它来装饰Id字段。