MongoDB LinQ “Select” method will really retrieve only a subset of fields?

梦想的初衷 提交于 2019-12-03 21:45:32

问题


Searching across the internet how to retrieve a subset of fields in MongoDB, using C# official driver (but using LinQ as the base architecture) I found how to do this in MongoDB shell.

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

Then, I found at C# LinQ Tutorial the Select method, which is equivalent to this:

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

However, the tutorial says the method "is used to project a new result type from the matching documents".

How to ensure this method will retrieve only the subset of fields and not the entire result and then select only the subset into a new object?

Will the driver build the query command before retrieve the results?


回答1:


The driver does not currently retrieve a subset of the fields. If you need that functionality, you'll need to do it manually. The ticket for this functionality is here: https://jira.mongodb.org/browse/CSHARP-456. Feel free to leave feedback or vote it up if you need this.




回答2:


This is cheating... but:

//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();


来源:https://stackoverflow.com/questions/11514084/mongodb-linq-select-method-will-really-retrieve-only-a-subset-of-fields

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!