MongoDB Driver for C# 如何获取数组中一个字段的值
How to get values of one field in array in MongoDB Driver for C#
我有 类:
public class Whole
{
public ObjectId Id { get; set; }
public string NeededField { get; set; }
public List<Detail> Details { get; set; }
public string SomeUnnecesaryField { get; set; }
}
public class Detail
{
public string NeededField { get; set; }
public string NotNeededField { get; set; }
}
[BsonNoId]
[BsonIgnoreExtraElements]
public class MyNeededInformations
{
public string NeededField { get; set; }
[BsonElement("Details.NeededField")]
public List<string> DetailsNeededFields { get; set; }
}
我试图通过投影获得它:
var filter = someFilter;
var projection = Builders<Whole>.Projection
.Include(w => w.NeededField)
.Include(w => w.Details)
.Exclude("_id");
return Collection
.Find(filter)
.Project(projection)
.As<MyNeededInformations>()
.ToList();
而且我每次都收到 DetailsNeededFields
作为空列表。我想要像标准聚合一样的字符串列表:
db.collection.aggregate([
{$match: someFilter},
{$project: {"_id": 0, "NeededField": 1, "DetailsNeededFields": "$Details.NeededField"}}
])
可以通过 AsQueryable
界面轻松实现,如下所示:
var results = await collection
.AsQueryable()
.Where(_ => true)
.Select(w => new MyNeededInformations
{
NeededField = w.NeededField,
DetailsNeededFields = (List<string>)w.Details.Select(d => d.NeededField)
})
.ToListAsync();
我有 类:
public class Whole
{
public ObjectId Id { get; set; }
public string NeededField { get; set; }
public List<Detail> Details { get; set; }
public string SomeUnnecesaryField { get; set; }
}
public class Detail
{
public string NeededField { get; set; }
public string NotNeededField { get; set; }
}
[BsonNoId]
[BsonIgnoreExtraElements]
public class MyNeededInformations
{
public string NeededField { get; set; }
[BsonElement("Details.NeededField")]
public List<string> DetailsNeededFields { get; set; }
}
我试图通过投影获得它:
var filter = someFilter;
var projection = Builders<Whole>.Projection
.Include(w => w.NeededField)
.Include(w => w.Details)
.Exclude("_id");
return Collection
.Find(filter)
.Project(projection)
.As<MyNeededInformations>()
.ToList();
而且我每次都收到 DetailsNeededFields
作为空列表。我想要像标准聚合一样的字符串列表:
db.collection.aggregate([
{$match: someFilter},
{$project: {"_id": 0, "NeededField": 1, "DetailsNeededFields": "$Details.NeededField"}}
])
可以通过 AsQueryable
界面轻松实现,如下所示:
var results = await collection
.AsQueryable()
.Where(_ => true)
.Select(w => new MyNeededInformations
{
NeededField = w.NeededField,
DetailsNeededFields = (List<string>)w.Details.Select(d => d.NeededField)
})
.ToListAsync();