例如我有以下类型的集合:
[
{ batch: false, type: '' },
{ batch: false, type: '' },
{ batch: true, type: '123' },
{ batch: true, type: '123' },
{ batch: true, type: '123' },
{ batch: true, type: '234' },
{ batch: true, type: '234' },
{ batch: true, type: '234' },
{ batch: true, type: '234' },
{ batch: true, type: '567' },
{ batch: true, type: '567' }
]
所以问题是,如何返回具有对象的数组,{batch: false}
如果{batch: true}
仅返回具有相同{type}
字段的第一个对象,基本上我想得到以下响应:
[
{ batch: false, type: '' },
{ batch: false, type: '' },
{ batch: true, type: '123' },
{ batch: true, type: '234' },
{ batch: true, type: '567' }
]
尝试以下聚合管道
db.getCollection('yourCollection').aggregate([
{
$group: {
_id: {
k1: {
$cond: {
if: "$batch",
then: null,
else: "$_id"
}
},
k2: "$type"
},
batch: { $first: "$batch" },
type: { $first: "$type" }
}
},
{
$project: {
_id: 0,
batch: 1,
type: 1
}
}
])
导致
/* 1 */
{
"batch" : false,
"type" : ""
}
/* 2 */
{
"batch" : false,
"type" : ""
}
/* 3 */
{
"batch" : true,
"type" : "123"
}
/* 4 */
{
"batch" : true,
"type" : "567"
}
/* 5 */
{
"batch" : true,
"type" : "234"
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句