MongoDb C#驱动程序-展开聚合结果绑定

时间:2019-08-04 18:44:27

标签: c# mongodb mongodb-.net-driver

我有两个独立的文档,Book和Person(比喻,我在自己的项目中有不同且更多的字段)。因为这会占用很多空间,所以我正在做一个参考过程,以避免受到更新的影响。在“个人”中,只有“书籍”的“ Id”字段列表。我的目标是加入“个人”下的“图书清单”。为此,我执行如下事件。

public class ObjectIdItems
{
    [BsonRepresentation(BsonType.ObjectId)]
    public string Id { get; set; }
}
public class Book
{
    [BsonRepresentation(BsonType.ObjectId)]
    public string Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}
public class Person
{
    [BsonRepresentation(BsonType.ObjectId)]
    public string Id { get; set; }
    public string Name { get; set; }
    public List<ObjectIdItems> Books { get; set; }
    [BsonIgnore] public List<Book> BookList { get; set; }
}
            var pCollection = _personRepository.Database.GetCollection<Person>(typeof(Person).Name);
            var result = pCollection.Aggregate()
                 .Match(x => true)
                 .Unwind(x => x.Books)
                 .Lookup(typeof(Book).Name, "Books._id", "_id", "BookList.Book")
                 .Unwind("BookList.Book")
                 .Group<Person>(new BsonDocument()
                 {
                    {"_id","$_id"},
                    {"Name", new BsonDocument("$first","$Name")},
                    {"Books", new BsonDocument("$push","$Books")},
                    {"BookList", new BsonDocument("$push", "$BookList.Book")}
                 });

            List<Person> persons = result.ToListAsync().Result;

如您所见,在Person中,“ BookList”被定义为“ [BsonIgnore]”。这样,数据库不会占用空间,但是我可以自由地使用该程序。不幸的是,我收到错误消息“元素'BookList'与类别Person的任何字段或属性都不匹配”。但是我可以用linq使用join没有任何问题。为什么看不到?如果删除[BsonIgnore],就可以正常工作。但这对我不好!我无法控制。例如,我必须在所有地方都进行控制(如果不为null),请使其为null并保存数据库!是肖像!我该怎么解决?

0 个答案:

没有答案