2017-02-07 6 views
0

Я не хочу возвращать список используемых слов и список общих баллов.пытается вернуть 2 массива с агрегатом mongo

У меня в док, как этот

"negativeWords" : [ 
     "Angry" 
    ], 
    "positiveWords" : [ 
     "Happy" 
    ], 

каждый документ может иметь несколько отрицательных или положительных слов.

также Каждый документ имеет общий балл, как:

"overall" : 3, 

Я хочу, чтобы получить массив как:

words : [Angry, Happy, Sad, bad, excited] 

и общий массив оценки для каждого документа:

в целом: [4, 3,2,5,]

Я не знаю, как получить оба.

Review.aggregate([ 


//now I want to get the overall scores and the array of words 
{ 
    $project: { 
     arr : {"$setUnion" : ["$negativeWords", "$positiveWords"]}, 
     overallScores : "$overall" 
    } 
}, 
{ 
    $unwind : "$arr" 
}, 
{ 
    $group : { 
     _id : "$_id", 
     words : {$push : "$arr"}, 
     overallScores : {$first : "$overallScores"} 
    } 
}, 

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

[ { _id: 5898b02c1321831b84740320, 
    words: [ 'Angry', 'Happy' ], 
    overallScores: 3 }, 
    { _id: 5898b02c1321831b8474031f, 
    words: 
    [ 'Difficult', 
     'Easy returns', 
     'Afordable', 
     'Great products', 
     'Good service' ], 
    overallScores: 5 }, 
    { _id: 5898b02c1321831b8474031e, 
    words: 
    [ 'Difficult', 
     'Easy returns', 
     'Afordable', 
     'Great products', 
     'Good service' ], 
    overallScores: 5 }, 
    { _id: 5898b02c1321831b8474031d, 
    words: [ 'Caring', 'Easy returns', 'Bad', 'Expensive' ], 
    overallScores: 3 }, 
    { _id: 5898b02c1321831b8474031c, 
    words: [ 'Difficult', 'Afordable', 'Awesome' ], 
    overallScores: 4 }, 
    { _id: 5898b02c1321831b8474031b, 
    words: [ 'Bad', 'Respect', 'Rude', 'Expensive', 'Disgusted' ], 
    overallScores: 3 }, 
    { _id: 5898b02c1321831b8474031a, 
    words: [ 'Difficult', 'Afordable' ], 
    overallScores: 4 }, 
    { _id: 5898b02c1321831b84740319, 
    words: [ 'No refund', 'Respect' ], 
    overallScores: 3 } ] 

код:

{ 
    $project: { 
     arr : {"$setUnion" : ["$negativeWords", "$positiveWords"]}, 
     overallScores : "$overall" 
    } 
}, 
{ 
    $unwind : "$arr" 
}, 
{$unwind : "$overallScores"}, 
{ 
    $group : { 
     _id : "$_id", 
     words : {$push : "$arr"}, 
     overallScores : {$first : "$overallScores"} 
    } 
} 
+0

Как общее поле относятся к массивы, или нет? –

+0

всего лишь номер. Они не относятся к положительным словам и массиву negativeWords. –

ответ

0

Вот один из способов, не беспокоясь об использовании $unwind:

$group : { 
    _id: null, 
    words: { 
     $addToSet: { 
      $setUnion: ["$negativeWords", "$positiveWords"] 
     }, 
    }, 
    overallScores: { 
     $push: "$overall" 
    }, 
} 

$project : { 
    _id: 0, 
    overallScores: 1, 
    words: { 
     $reduce: { 
      input: '$words', 
      initialValue: [], 
      in : { 
       $setUnion: ['$$value', '$$this'] 
      } 
     }, 
    } 
} 
+0

Спасибо за ответ, но '$ reduce' для версии 3.4. У меня 3.2. –