2016-02-25 5 views
2

Как выполнить поиск $ с помощью драйвера MongoDB C#? Я не могу найти его в их водитель документ здесь:

https://docs.mongodb.org/getting-started/csharp/query/

Но если я понимаю, этот билет в их JIRA правильно, он должен быть в версии 2.2 драйвера:

https://jira.mongodb.org/browse/CSHARP-1374

+1

Я предполагаю, что вы имеете в виду отсутствующий метод «помощник», который следует ожидать только в том случае, если большинство драйверов, реализующих такие вещи, отстают от функций новых версий серверов. Агрегационные трубопроводы, как и обычные запросы, на самом деле являются просто структурами BSON. Все, что вы можете сконструировать как документы BSON, может быть подано в качестве входных данных в '.find()' или '.aggregate()', до тех пор, пока оно действительно. Поэтому просто конструируйте трубопровод непосредственно как документы BSON. До тех пор, пока у вас есть сервер MongoDB 3.2 для поддержки '$ lookup', конечно. Который является главным фактором здесь. –

ответ

3

Если вы используете метод расширения AsQueryable() на IMongoCollection <T>, вы можете использовать интерфейс LINQ в качестве примера.

var query = from p in collection.AsQueryable() 
      join o in otherCollection on p.Name equals o.Key into joined 
      select new { p.Name, AgeSum: joined.Sum(x => x.Age) }; 

Это был скопирован из документации драйвера MongoDB Csharp здесь http://mongodb.github.io/mongo-csharp-driver/2.2/reference/driver/crud/linq/#lookup

+0

Можно ли это сделать без linq? – NickAb

+0

Какой тип 'otherCollection'? – thepirat000

+0

Вам нужно использовать использование пространства имен MongoDB.Driver.Linq; ', чтобы эта работа – tigrou

5

Вы также можете добиться того, что с помощью метода collection.Aggregate().Lookup() или добавив поиск в совокупности этапов.

collection.Aggregate() 
    .Lookup("foreignCollectionName", "localFieldName", "foreignFieldName", "result"); 
Смежные вопросы