我有两个IMongoCollection
个保存类型分别为Person
和Animal
的文档。
public class Person
{
public Guid PersonId { get; set; } = Guid.NewGuid();
public Guid PetId { get; set; }
}
public class Animal
{
public Guid AnimalId { get; set; } = Guid.NewGuid();
public bool IsMammal { get; set; }
}
...
Animal bootsTheMonkey = new Animal() { IsMammal = true };
Person doraTheExplorer = new Person() { PetId = bootsTheMonkey.AnimalId };
我正在尝试编写一个查询,以查找“所有宠物均为哺乳动物的人”。
var query =
from pDoc in PersonDocumentCollection.AsQueryable()
where !pDoc.PetId.Equals(Guid.Empty)
join aDoc in AnimalDocumentCollection.AsQueryable() on pDoc.PetId equals aDoc.AnimalId
where aDoc.IsMammal
select pDoc;
尽管该查询是错误消息所表明的错误信息
$ project或$ group不支持{document}。
从搜索看来,此错误似乎是由于使用where aDoc.IsMammal
而引起的,更具体而言,是在aDoc
内/之后使用join
(基于此{{3} }。尽管我不确定这是否是问题所在。
总的来说,我正在尝试join
的两个IMongoCollection
,其中第一个文档的字段值为另一个集合中文档的BsonId
。然后,一旦加入,我想首先将第一个集合中的文档放在第二个中的字段值上。
答案 0 :(得分:1)
您可以尝试执行以下操作(假设allPeople是您所有Person对象的列表,而allAnimals是您所有Animal对象的列表):
var query = allPeople
.Join(allAnimals,
p => p.PetId,
a => a.AnimalId,
(p, a) => new { P = p, A = a })
.Where(PA => PA.A.IsMammal == true);