2016-11-16 2 views
2

я пытаюсь получить различные первые слова в поле в базе данных:Получить отличные первые слова в строке

db.mycollection.distinct(substr(0, city.indexOf(' ')),{"state":"FirstState"}) 

Но это не работает obviosly, но, возможно, это помогает получить представление о том, что я хочу делать.

Скажем, у меня есть два документа:

{ 
    "_id": "10280", 
    "city": "FirstCity is great", 
    "state": "FirstState", 
    "pop": 2224 
}, 
{ 
    "_id": "10282", 
    "city": "SecondCity even greater", 
    "state": "FirstState", 
    "pop": 5574 
} 

я тогда хочу получить:

["FirstCity","SecondCity"] 

Т.е. получить отличные значения city Поле first word в массиве. Есть ли способ сделать это?

С наилучшими пожеланиями

+0

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

+0

@Styvane. См. Обновленный вопрос. – user1665355

+0

Кажется, что вы не можете достичь этого до монго 3.3.6. Но текущая стабильная версия - 3.2.10. Посмотрите это [аналогичный вопрос] (http://stackoverflow.com/questions/28282334/mongodb-group-by-field-using-substr) – gzc

ответ

2

Вы можете использовать метод map() вернуть список следующим образом

Монго Shell:

cities = db.mycollection.distinct("city", {"state" : "FirstState"}).map(function(city){ 
    return city.split(" ")[0]; 
}); 
printjson(cities); 

Пример вывода

[ "FirstCity", "SecondCity" ] 
+1

Хорошее решение tnx! – user1665355

+0

Возможно, у вас есть идея о том, как получить только уникальные элементы в массиве? – user1665355

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