Элемент массива проекта из документа - PullRequest
0 голосов
/ 05 октября 2018

представьте, что у меня есть следующая установка класса, которую я храню в своей коллекции 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.

Заранее спасибо за помощь!

...