Подтвердить что ты не робот

Проецирование запроса с помощью драйвера MongoDB 10gen

Недавно я играл с официальным драйвером mongodb. Проблема, с которой я столкнулся, заключалась в том, как сделать запрос. Пример, если у меня есть постоянный объект

class A{
  id
  PropA
  PropB
  List<LargeObjects>
}

Как я могу получить только id, PropA и PropB вместо получения всего объекта? Как можно сделать с официальным драйвером С# mongodb?

4b9b3361

Ответ 1

Проецирование запроса доступно через:

MongoCollection<>.Find().SetFields(include/exclude);

Ответ 2

Начиная с версии 1.1 официального драйвера 10gen MongoDB С# (и, как и в случае с Zambonilli в предыдущем ответе) оператор Select linq всегда будет выполняться на стороне клиента, а не на сервере db.

Документация (также предоставленная Sunil Raj в предыдущем ответе): http://docs.mongodb.org/ecosystem/tutorial/use-linq-queries-with-csharp-driver/

Почти половина пути вниз по странице под оператором запроса "Выбрать" linq представляет собой большой красный квадрат, который гласит:

Предупреждение. Выбор не приводит к меньшему количеству полей, возвращаемых с сервера. Весь документ отводится назад и передается в собственный метод выбора. Поэтому проекция выполняется на стороне клиента.

Ответ 3

Для этого можно использовать следующий запрос 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

Ответ 5

Используйте FindAs<>() с типом, который включает только нужные вам поля. См. docs.

Добавьте атрибут [BsonIgnoreExtraElements] или [BsonExtraElements] в этот класс. См. docs.

Ответ 6

Используя профилировщик Mongo, я смог определить, что иногда результаты Linq проецируются на клиенте. Поэтому это зависит от потребностей вашего клиента. Если вы хотите вернуть результирующий документ с частичными данными с сервера Mongo, вы можете использовать ответы Marjan или Ian. В противном случае, если вы хотите прочитать запись и спроецировать ее на другой тип данных, используйте Linq.