2017-02-06 5 views
0

Как я могу найти длину каждого элемента в "mol" списке:Как подсчитать элементы в списке списков

Например, если я ищу "versionA" : "2.1.2" я ожидаю ВЗ получить следующий результат:

{"project" : "A", "scene" : 13455312, mol:[3,2,1]}, 
{"project" : "B", "scene" : 13455344, mol:[3,3,3]} 

Мои данные:

{ 
     "project" : "A", 
     "scene" : 13455312, 
     "versionA" : "2.1.2", 
     "versionB" : "2.1.9", 
     "mol" : [ {"data" : [ { "tran" : 'A' }, { "tran" : 'B' }, { "tran" : 'C' }]}, {"data" : [ { "tran" : 'A' }, { "tran" : 'B' }]}, {"data" : [ { "tran" : 'A' }]}] 
    }, 

    { 
     "project" : "B", 
     "scene" : 13455344, 
     "versionA" : "2.1.2", 
     "versionB" : "2.1.9", 
     "mol" : [ {"data" : [ { "tran" : 'A' }, { "tran" : 'B' }, { "tran" : 'C' }]}, {"data" : [ { "tran" : 'A' }, { "tran" : 'B' }, { "tran" : 'C' }]}, {"data" : [ { "tran" : 'A' }, { "tran" : 'B' }, { "tran" : 'C' }]}] 
    }, 
    { 
     "project" : "C", 
     "scene" : 135555, 
     "versionA" : "2.1.3", 
     "versionB" : "2.1.9", 
     "mol" : [ {"data" : [ { "tran" : 'A' }]}, {"data" : [ { "tran" : 'A' }]}, {"data" : [ { "tran" : 'A' }]}] 
    } 

ответ

1

Вы можете $match в version поле и $map, который перебирает на mol и $size для вычисления длины поля данных.

db.collection.aggregate(
    [{ 
     $match: { 
      "versionA": "2.1.2" 
     } 
    }, { 
     $project: { 
      _id: 0, 
      "project": 1, 
      "scene": 1, 
      "mol": { 
       $map: { 
        input: "$mol", 
        as: "mo", 
        in: { 
         $size: "$$mo.data" 
        } 
       } 
      } 
     } 
    }] 
) 
+0

Спасибо, что именно я хотел. –

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