假设我在MongoDB中具有以下文档结构。
{
_id: ####,
Ancestors: [
{ _id: 1, Name: "asdf" },
{ _id: 2, Name: "jkl;" },
...
]
}
我想找到每个包含祖先_id为2的祖先的文档。
我可以使用以下命令在mongo shell中运行此查询: db.projects.find({"Ancestors._id": 2})
我还可以使用官方的C#驱动程序通过以下命令运行此查询:Query.EQ("Ancestors._id", new BsonInt32(rootProjectId))
。
这是我的POCO;我正在使用的实际类具有比此更多的属性,但是我不想用不必要的细节来弄乱这个问题:
public class Project
{
public int Id { get; set; }
public List<ProjectRef> Ancestors { get; set; }
}
public class ProjectRef
{
public int Id { get; set; }
public string Name { get; set; }
}
我的问题是:如何使用C#驱动程序编写强类型查询,这样我就不必将“ Ancestors._id”作为字符串传递?我希望能够做类似的事情,Query<Project>.EQ(p => p.Id, rootProjectId)
以便我可以改用成员表达式,并让类映射告诉驱动程序它应使用“ Ancestors._id”。
在这种情况下,ElemMatch是您的朋友。
尝试以下方法:
var ancestorsQuery = Query<ProjectRef>.EQ(pr => pr.Id, rootProjectId);
var finalQuery = Query<Project>.ElemMatch(p => p.Ancestors, builder => ancestorsQuery));
在Projects集合的Find命令中使用finalQuery。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句