![](/img/trans.png)
[英]How do I get C# Mongo driver to compare a DateTime field using Linq expressions?
[英]How do I return a document with filtered sub-documents using Mongo.Driver.Linq with the Mongo C# driver 2.3?
鉴于以下内容,我如何返回包含 TypeOfBar == "Big" 的 Bars 的所有 Foos并且将 Foos 的 Bars 限制为仅具有 TypeOfBar == "Big" 的那些 Bars?
public class Foo
{
public string _id { get; set; }
public List<Bar> Bars { get; set; }
}
public class Bar
{
public string _id { get; set; }
public string TypeOfBar { get; set; }
}
我可以轻松获得第一部分(所有带有特定类型 Bars 的 Foos):
var client = new MongoClient("myconnectionstring");
var db = client.GetDatabase("myDb");
var collection = db.GetCollection<Foo>("Foos");
var foos = collection.AsQueryable().Where(x => x.Bars.Any(b => b.TypeOfBar == "Big"));
但是,我很难弄清楚如何让数据库返回带有过滤后的 Bars 列表的 Foos。
如果您只想过滤掉类型为“Big”的 Foos,您应该应用ElemMatch
Projection:
var res = collection.Find(x => x.Bars.Any(b => b.TypeOfBar == "Big"))
.Project(Builders<Foo>.Projection.ElemMatch(x=>x.Bars, b=>b.TypeOfBar == "Big"));
您将遇到的问题:投影将返回 Bson。 也许这就是你所需要的,你可以忍受它,如果不是,你应该将 Bson 反序列化到你的 Foo 类。 完整的查询我确实看起来像:
var res = collection.Find(x => x.Bars.Any(b => b.TypeOfBar == "Big"))
.Project(Builders<Foo>.Projection.ElemMatch(x=>x.Bars, b=>b.TypeOfBar == "Big"))
.ToEnumerable()
.Select(b=>BsonSerializer.Deserialize<Foo>(b))
.ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.