2015-11-16 2 views
2

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

field = ['A'] 

или field = ['A', 'B']

pipeline = [ {"$unwind": "$field"}, 
      {"$group": {"_id": "$field", "count" : { "$sum" : 1 } } }, 
      {"$sort": {"_id" : 1} }, 
      ] 

Однако в моих результатах, я вижу запись как [{"_id": ['A', 'B'], "count": 5}], где я хотел бы [{"_id": ['A'], "count": 5}, {"_id": ['B'], "count": 5}]

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

+1

Это неправда. Я предполагаю, что у вас есть поле: [['A', 'B']] ' – styvane

+0

Просто заметили, что было больно найти эту запись! Есть ли все равно, чтобы сгладить или раскрутить это? – disruptive

+0

- массив полей двух измерений для всех ваших документов? – styvane

ответ

1

Ваш пример должен работать, если ваши данные не организованы по-разному. В следующем примере данные:

db.unwind.save({field:['A','B']}) 

и команда Монго оболочки:

db.unwind.aggregate([{ 
    "$unwind": "$field" 
}, { 
    "$group": { 
    "_id": "$field", 
    "count": { 
     "$sum": 1 
    } 
    } 
}, { 
    "$sort": { 
    "_id": 1 
    } 
}, ]) 

дает:

{ "_id" : "A", "count" : 1 } 
{ "_id" : "B", "count" : 1 } 

Если данные на самом деле field:[['A','B']] вам нужно будет добавить дополнительный $unwind параметр :

db.unwind.aggregate([{ 
    "$unwind": "$field" 
}, { 
    "$group": { 
    "_id": "$field", 
    "count": { 
     "$sum": 1 
    } 
    } 
}, { 
    "$sort": { 
    "_id": 1 
    } 
}, { 
    "$unwind": "$_id" 
}]) 
Смежные вопросы