我创建了一个简单的类
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属性)