представьте, что у меня есть следующая установка класса, которую я храню в своей коллекции MongoDB:
public class Person
{
public ObjectId _id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public List<Person> Children { get; set; }
}
Таким образом, отдельный документ внутри коллекции может выглядеть следующим образом:
{
"_id" : ObjectId("<<myObjectId>>"),
"FirstName" : "James",
"LastName" : "Bond",
"Children" : [
{
"_id" : ObjectId("<<myObjectId>>"),
"FirstName" : "Peter",
"LastName" : "Bond",
"Children" : null
},
{
"_id" : ObjectId("<<myObjectId>>"),
"FirstName" : "Thomas",
"LastName" : "Bond",
"Children" : null
},
{
"_id" : ObjectId("<<myObjectId>>"),
"FirstName" : "Henry",
"LastName" : "Bond",
"Children" : null
}
]
}
FromДети Джеймса. Теперь я хочу найти тех, кого зовут Томас.Я могу добиться этого с помощью следующей проекции:
var projection = Builders<Person>
.Projection
.ElemMatch(person => person.Children, child => child.LastName == "Bond")
.Exclude(person => person._id);
Когда я теперь указываю мои FindOptions как FindOptions<Person, Person>
, результат будет:
{
"_id" : ObjectId("0000000000000"),
"FirstName" : null,
"LastName" : null,
"Children" : [
{
"_id" : ObjectId("<<myObjectId>>"),
"FirstName" : "Thomas",
"LastName" : "Bond",
"Children" : null
}
]
}
Для меня это не идеально, так как я 'Я бы предпочел иметь IEnumerable<Person>
в результате.Я знаю, что мог бы создать его сам по полученному результату, но мне интересно, есть ли нативная поддержка для этого?
Я использую MongoDB.Driver 2.7.0 с Community Edition MongoDB в версии 4.0.2.
Заранее спасибо за помощь!