mongoDB查询给我一个像这样的结果数组:
var result = [
{
_id: 'GrRQ56ZvTGpSajvCr',
title: 'Element 1'
meta: {
groupId: '1'
}
},
{
_id: 'nQs7T5QZcjbyxe6Yh',
title: 'Element 2'
meta: {
groupId: '1'
}
},
{
_id: 'cbDqv6ExZoYJQJLnP',
title: 'Element 3'
meta: {
groupId: '2'
}
},
{
_id: 'v6ExZoYcbDqJQJLnP',
title: 'Element 4'
meta: {
groupId: '2'
}
},
{
_id: 'qbqiEGwsGyprfutZM',
title: 'Element 5'
meta: {
}
},
{
_id: 'rfutZMqbqiEGwsGyp',
title: 'Element 6'
meta: {
}
}
]
现在我需要输出没有groupID的每个元素,并且每个相同的groupId只输出一个元素。 (我不能直接在我的mongoDB查询中使用distinct
或aggregate
,所以我必须使用此结果)
所以我想考虑使用_.unique
或_.groupBy
。
const resultGroupBy = _.groupBy(result, function(element) { return element.meta.groupId })
const resultUnique = _.uniq(result, function(item, key, a) { return item.a }) // don't understand the syntax for this :-(
但两者都没有按要求工作。
我的结果应该是:
groupedResult.map((element) => {
console.log(element.title, kindOfCounter)
})
Element 1, 2 // Two elements for group 1
Element 3, 2 // Two elements for group 2
Element 5, 1 // Single element without group
Element 6, 1 // Single element without group
元素2和元素4被删除,因为组1和组2应该只由一个元素表示,尽管开头有两个元素。
答案 0 :(得分:0)
我认为_.uniq
应该做你想做的事。
var result = [
{
_id: 'GrRQ56ZvTGpSajvCr',
title: 'Element 1',
meta: {
groupId: '1'
}
},
{
_id: 'nQs7T5QZcjbyxe6Yh',
title: 'Element 2',
meta: {
groupId: '1'
}
},
{
_id: 'cbDqv6ExZoYJQJLnP',
title: 'Element 3',
meta: {
groupId: '2'
}
},
{
_id: 'v6ExZoYcbDqJQJLnP',
title: 'Element 4',
meta: {
groupId: '2'
}
},
{
_id: 'qbqiEGwsGyprfutZM',
title: 'Element 5',
meta: {
}
},
{
_id: 'rfutZMqbqiEGwsGyp',
title: 'Element 6',
meta: {
}
}
];
var resultUniq = _.uniq(result, e => e.meta.groupId);
console.log(resultUniq.map(e => e.title));

<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
&#13;
Element 6
未包含在结果中,因为它没有groupId
。您可以更改iteratee函数,以便在e.meta.groupId
未定义时返回默认值。