2016-05-16 1 views
2

Я мог бы быть в борьбе, чтобы получить поиск фасетов в mongodb с помощью драйвера C#. Я проверил множество учебников, но не получил подходящего решения. Мой документ/сборник будет следующим.MongoDB faceted search

db.products.insert([ 
    {"product_name": "Product 1", "year":2014,"Manufacturer":"manufacturer1"}, 
    {"product_name": "Product 2", "year":2015,"Manufacturer":"manufacturer2"}, 
    {"product_name": "Product 3", "year":2014,"Manufacturer":"manufacturer1"}, 
    {"product_name": "Product 4", "year":2015,"Manufacturer":"manufacturer2"}, 
    {"product_name": "Product 5", "year":2014,"Manufacturer":"manufacturer1"} 
]) 

Я хочу, чтобы выход как

Год:

2014: 3

2015: 2

Производитель

Manufacturer1: 3

Производитель1: 2

Может ли кто-нибудь помочь мне решить вышеуказанную проблему с помощью драйвера C#.

ответ

0

Использование MongoDB оболочки это может быть сделано с помощью $ группы в два этапа:

db.products.aggregate([{$group:{_id:"$year",count:{$sum:1}}}]) 

db.products.aggregate([{$group:{_id:"$Manufacturer",count:{$sum:1}}}]) 
+0

Я хочу, чтобы это было в одном запросе с использованием C#, можно ли это сделать? – Bhimisetty

+1

В настоящий момент это не может быть сделано ни одним драйвером, потому что сервер не поддерживает эту службу. Однако отслеживайте этот билет на треке для сервера 3.4: https://jira.mongodb.org/browse/SERVER-23654. –

+0

Новый драйвер C# поддерживает это, но я не могу понять, как заставить его работать, чтобы получить ответ – Chris

0

Вы можете поместить несколько трубопроводов внутри граненой запроса. Но помните, что вы не можете передавать вывод одной трубы в другую трубу.

Каждый подтрубник в пределах $ facet проходит тот же набор входных документов. Эти суб-трубопроводы полностью независимы друг от друга, и каждый из массивов документов, каждый из которых хранится в отдельном поле в выходном документе. Выход одного субподвода не может использоваться в качестве входного сигнала для другого подтрубка на той же фазе $ facet. Если требуются дополнительные агрегирования, добавьте дополнительные этапы после $ facet и укажите имя поля, нужного выхода суб-конвейера.

Вы можете попробовать следующий запрос, чтобы получить желаемый результат.

db.products.aggregate([ 
    { 
     $facet : { 
      year : { 
       $group : { 
        _id : '$year', 
        count : { 
         $sum : 1 
        } 
       } 
      }, 
      manufacturer : { 
       $group : { 
        _id : '$Manufacturer', 
        count : { 
         $sum : 1 
        } 
       } 
      } 
     } 
    } 
])