当C#类没有Id时,如何在MongoDb中查找元素

时间:2017-06-16 12:00:33

标签: c# mongodb linq

我创建了一个简单的类

public class Person
{
    public string Name { get; set; }
    public Person familyMember { get; set; }
}

然后我将该类的元素插入Mongo:

        var client = new MongoClient("mongodb://localhost:27017");
        var database = client.GetDatabase("foo");
        _collection = database.GetCollection<Person>("bar");
        Person p = new Person()
        {
            Name = "A",
            familyMember = new Person
            {
                Name = "B"
            }
        };
        _collection.InsertOne(p);

这有效,我可以看到shell中的元素:

  

{&#34; _id&#34; :ObjectId(&#34; 5943c0613fd36abf26c5d4ee&#34;),&#34; Name&#34; :&#34; A&#34;,   &#34; familyMember&#34; :{&#34;姓名&#34; :&#34; B&#34;,&#34; familyMember&#34; :null}}

我意识到mongo为我创造了一个id。

问题是当我试图找到一个元素时:

_collection.AsQueryable().Single(person => person.Name == "A");

导致异常:

  

System.FormatException:&#39;元素&#39; _id&#39;不匹配任何字段或   HashTagReplace.Person类的属性。&#39;

我理解为什么会出现这个错误,C#对象和文档之间的映射存在问题,因为C#Person类型没有Id属性。

我可以通过添加这样的属性来解决这个问题,但我不想让Mongo依赖于我的数据对象。

如何在不诉诸shell之类的情况下预先形成查询?

假设我在这个集合中有其他类型的元素,我仍然可以进行搜索并忽略那些没有&#34;看起来&#34;喜欢一个人? (至少一次没有Name属性)

0 个答案:

没有答案