2016-10-05 5 views
0

Учитывая, что у меня есть набор документов, как показано ниже, и я хочу, чтобы получить информацию, возвращаемую следующим образом:фильтра коллекция, но сортировать по внутреннему свойству

Выберите все записи из кампании с campaignID = 12, сортировать по entries.questionscorrect в убывающем порядка с лимитом 10.

Я сделал удар по ряду запросов, но я, похоже, зациклился на том, что я выбираю на одном уровне, но хочу заказать на более низком уровне, т. е. свойство.

Вот что я до сих пор:

db.getCollection('main').find({"id":4}, {"entries": 1}).sort({"questionscorrect": -1}).limit(2)

Как я могу написать это в любом Go (ГГО) синтаксисе или прямой запрос MongoDB пожалуйста?

Я продолжаю получать информацию, но вернулся отсортирован по количеству

{ 
    "_id": ObjectId("57f4a590a4be269aa54a0505"), 
    "campaignID": 12, 
    "name": "name-here", 
    "description": "description-here", 
    "entries": [{ 
     "id": 1, 
     "nickname": "conorh", 
     "name": "conor h***", 
     "email": "[email protected]", 
     "agreeTerms": true, 
     "optInMarketing": false, 
     "questionscnswered": 10, 
     "questionscorrect": 3 
    }, { 
     "id": 2, 
     "nickname": "bobs", 
     "name": "bob smyth", 
     "email": "[email protected]", 
     "agreeTerms": true, 
     "optInMarketing": false, 
     "questionscnswered": 10, 
     "questionscorrect": 6 
    }, { 
     "id": 3, 
     "nickname": "jd12", 
     "name": "jane doe", 
     "email": "[email protected]", 
     "agreeTerms": true, 
     "optInMarketing": false, 
     "questionscnswered": 10, 
     "questionscorrect": 1 
    }] 
} 
+0

Неясно, что ожидаемый результат. Не могли бы вы рассказать? – styvane

ответ

0

Попробуйте ниже:

db.getCollection('main').aggregate([ 
{$match: {"campaignID" : 12.0}}, 
{$unwind:"$entries"}, 
{$sort: {"entries.questionscorrect": -1}}, 
{$group:{_id:"$_id", 
    "entries":{$push:"$entries"}}} 
]) 

 Смежные вопросы

  • Нет связанных вопросов^_^