2017-07-25 122 views
0

我在MongoDB中有点新,我很难完成某个任务。我会尽力解释它。有没有办法在MongoDB中将两个数组合并成一个数组?

下面是我收集:

'workers': [ 
    { 
     _id: ObjectId(...), 
     name: 'John', 
     skills: [ 
      { id: ObjectId('111'), value: 2 }, 
      { id: ObjectId('222'), value: 3 }, 
      { id: ObjectId('333'), value: 4 }, 
     ] 
    }, 
    { 
     _id: ObjectId(...), 
     name: 'Mary', 
     skills: [ 
      { id: ObjectId('222'), value: 5 }, 
      { id: ObjectId('333'), value: 2 }, 
      { id: ObjectId('444'), value: 3 }, 
     ] 
    }, 
    ... 
] 

我试图做到的,是这样的:

result: [ 
    allSkills: [ 
     { id: ObjectId('111'), value: 2 }, 
     { id: ObjectId('222'), value: 5 }, 
     { id: ObjectId('333'), value: 4 }, 
     { id: ObjectId('444'), value: 3 } 
    ] 
] 

我的结果应该是一个单一的阵列与workers集合中的所有技能(最终我会过滤它们)。

在这个例子中,我告诉我的最终结果,只有独特的价值观和每个技能的更大value,但我想在这里实现只是合并所有skills阵列整合到一个单一的allSkills阵列。现在,我得到的是一个文档列表,每个文档都有其skills数组。

在此先感谢。

回答

3

像这样的事情?:

db.collection.distinct('skills'); 

distinct api docs here!

另外,如果你想获得只是技巧对象的道具,例如像“价值”,你可以这样做:

db.collection.distinct('skills.value'); 

希望它有帮助。

+1

是的,它帮助:) 我想开发这个答案来实现我的最终结果,但绝对有帮助。 – Kleber

1

我接受了SebastiánEspinosa的回答,因为它回答了我的问题。但只是为了记录在案,我结束了使用另一种解决办法,我把这里将来参考:

db.workers.aggregate([ 
    { $unwind: "$skills" }, 
    { 
     $group: { 
      _id: '$skills.id', 
      value: { $max: '$skills.value' } 
     } 
    } 
]) 

其中产生的结果:

result: [ 
    { id: ObjectId('111'), value: 2 }, 
    { id: ObjectId('222'), value: 5 }, 
    { id: ObjectId('333'), value: 4 }, 
    { id: ObjectId('444'), value: 3 } 
] 

的宝藏,这里存在的$unwind运营商,这有助于实际合并skills阵列。

我之所以没有使用明显的答案是因为我无法将其发展到我所期待的最终结果,但正如我所说,它完全回答了我原来的问题。

相关问题