Ответ 1
Проецирование запроса доступно через:
MongoCollection<>.Find().SetFields(include/exclude);
Недавно я играл с официальным драйвером mongodb. Проблема, с которой я столкнулся, заключалась в том, как сделать запрос. Пример, если у меня есть постоянный объект
class A{
id
PropA
PropB
List<LargeObjects>
}
Как я могу получить только id, PropA и PropB вместо получения всего объекта? Как можно сделать с официальным драйвером С# mongodb?
Проецирование запроса доступно через:
MongoCollection<>.Find().SetFields(include/exclude);
Начиная с версии 1.1 официального драйвера 10gen MongoDB С# (и, как и в случае с Zambonilli в предыдущем ответе) оператор Select linq всегда будет выполняться на стороне клиента, а не на сервере db.
Документация (также предоставленная Sunil Raj в предыдущем ответе): http://docs.mongodb.org/ecosystem/tutorial/use-linq-queries-with-csharp-driver/
Почти половина пути вниз по странице под оператором запроса "Выбрать" linq представляет собой большой красный квадрат, который гласит:
Предупреждение. Выбор не приводит к меньшему количеству полей, возвращаемых с сервера. Весь документ отводится назад и передается в собственный метод выбора. Поэтому проекция выполняется на стороне клиента.
Для этого можно использовать следующий запрос linq:
//NB: Not tested
MongoCollection<BsonDocument> Acollection = _db.database.GetCollection<BsonDocument>("A");
var resultlist = (from k in Acollection.AsQueryable<A>()
select k.id,k.PropA,k.PropB);
Более подробную информацию о запросах linq можно найти здесь: http://www.mongodb.org/display/DOCS/CSharp+Driver+LINQ+Tutorial#CSharpDriverLINQTutorial-SupportedLINQqueryoperators
Взгляните на FluentMongo:
https://github.com/craiggwilson/fluent-mongo/wiki/Linq
Он доступен также в Nuget, ищите "fluentmongo"
Используйте FindAs<>
() с типом, который включает только нужные вам поля. См. docs.
Добавьте атрибут [BsonIgnoreExtraElements]
или [BsonExtraElements]
в этот класс. См. docs.
Используя профилировщик Mongo, я смог определить, что иногда результаты Linq проецируются на клиенте. Поэтому это зависит от потребностей вашего клиента. Если вы хотите вернуть результирующий документ с частичными данными с сервера Mongo, вы можете использовать ответы Marjan или Ian. В противном случае, если вы хотите прочитать запись и спроецировать ее на другой тип данных, используйте Linq.