2015-04-25 3 views
2

Есть ли способ в mongo для меня указать формат того, как я хочу вернуть данные?Укажите формат возврата

Я хотел бы иметь возможность возвращать элементы как массив, если это возможно. Давайте посмотрим на этот очень простой пример:

{ 
    color: red 
}, 
{ 
    color: white 
}, 
{ 
    color: blue 
} 

Так что для этого примера я хотел бы получить вышеуказанные документы в виде массива:

{ 
    colors: [red, white, blue] 
} 

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

ответ

2

Использование aggregation framework. Конвейер агрегации будет просто иметь операцию $group, где оператор $addToSet добавляет значения в массив. Например, с коллекцией, которая имеет образцы документов:

/* 1 */ 
{ 
    "_id" : ObjectId("553c0101dddf8dcf96bdcdea"), 
    "color" : "red" 
} 

/* 2 */ 
{ 
    "_id" : ObjectId("553c0101dddf8dcf96bdcdeb"), 
    "color" : "white" 
} 

/* 3 */ 
{ 
    "_id" : ObjectId("553c0101dddf8dcf96bdcdec"), 
    "color" : "blue" 
} 

Следующая агрегация

db.collection.aggregate([ 
    { 
     "$group": { 
      "_id": 0, 
      "colors": { 
       "$addToSet": "$color" 
      } 
     } 
    }, 
    { 
     "$project": { 
      "_id": 0, 
      "colors": 1 
     } 
    } 
]) 

даст желаемый результат:

/* 1 */ 
{ 
    "result" : [ 
     { 
      "colors" : [ 
       "blue", 
       "white", 
       "red" 
      ] 
     } 
    ], 
    "ok" : 1 
} 
+1

хорошо звучит! позвольте мне дать ему тест! –

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