我有两个独立的文档,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并保存数据库!是肖像!我该怎么解决?