在过滤文档 "within" 连接时选择连接文档 "outside"?
Selecting on document "outside" of join while filtering on documents "within" join?
我有两个 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 };
我正在尝试编写一个查找 "all persons whose pets are mammals".
的查询
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 or $group does not support {document}.
从搜索来看,这个错误似乎是由 where aDoc.IsMammal
的使用引起的,更具体地说是 aDoc
within/after join
的使用(基于此SO question)。虽然我不完全确定这是否是问题所在。
总的来说,我正在尝试 join
两个 IMongoCollection
,其中第一个文档的字段值是另一个集合中文档的 BsonId
。然后一旦加入,我想首先将第一个集合中的文档放在第二个字段的值上。
您可以尝试这样做(假设 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);
我有两个 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 };
我正在尝试编写一个查找 "all persons whose pets are mammals".
的查询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 or $group does not support {document}.
从搜索来看,这个错误似乎是由 where aDoc.IsMammal
的使用引起的,更具体地说是 aDoc
within/after join
的使用(基于此SO question)。虽然我不完全确定这是否是问题所在。
总的来说,我正在尝试 join
两个 IMongoCollection
,其中第一个文档的字段值是另一个集合中文档的 BsonId
。然后一旦加入,我想首先将第一个集合中的文档放在第二个字段的值上。
您可以尝试这样做(假设 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);