MongoDB的LinQ在“选择”方法确实只检索领域的一个子集?(MongoDB LinQ “Sel

2019-06-26 08:18发布

搜索在互联网上如何检索MongoDB中字段的子集,使用C#的官方驱动程序(但使用LINQ作为基础架构),我发现了如何在MongoDB的外壳做到这一点。

// selecting only "field" of a collection
db.collection.find( { field : 'value' }, { field: 1 } ); 

然后,我发现在C#的LinQ教程的Select方法,这相当于这个:

collection.AsQueryable<T>().Select(x => new { x.field });

然而,教程说的方法“ 用于投影从匹配文档的新结果类型 ”。

如何保证这种方法只检索字段的子集,而不是整个结果,然后只选择子集到一个新的对象吗?

将驱动程序之前构建查询命令检索结果?

Answer 1:

司机目前没有检索字段的子集。 如果你需要这个功能,你需要做手工。 这种功能的票是在这里: https://jira.mongodb.org/browse/CSHARP-456 。 随意留下意见或投上一票,如果你需要这个。



Answer 2:

这是一种欺骗行为......但是:

//This actual implementation is untested and may contain small errors.
//The helper method has been tested and *should* work.

public static IMongoQuery GetMongoQuery<T>(this IQueryable<T> query)
{
    return ((MongoQueryable<T>)query).GetMongoQuery();
}

var temp =
    from x in DB.Foo.AsQueryable<Test>()
    where x.SomeField > 5;
    select (x.OtherField);

return temp.GetMongoQuery().ToJson();


文章来源: MongoDB LinQ “Select” method will really retrieve only a subset of fields?