mongodb数据库查询语句,多条件筛选

mongodb数据库,某个表内有多个字段,其中4个字段为属性值,要求删除4个属性值完全相同的数据,例某两条数据的c1,c2,c3,c4四个属性各自一 一对应且相同,要求只保留最新的一条,请问用Mongodb语句该如何操作,目前自己编写的语句,可以筛选出所有4个属性完全相同的数据,但是没办法去掉最新的一条。
哪位大神可以指点一下
db.basestationinfo.aggregate([{
$sort: {
_id:-1
}
},{
$group: {
_id: {
c1: '$c1',
c2: '$c2',
c3: '$c3',
c4: '$c4'
},
numcount: {
$sum: 1
},
id:{$push:'$_id'},
firstid:{$first:'$_id'}

    }
},
{
    $match: {
        numcount: {
            $gt: 1
        }
    }
}

])

qq969068709
陌路渐远 已解决
一年多之前 回复
qq969068709
陌路渐远 还有一个想法是,相办法知道组内每条所占顺序,eg:某组内共5条数据,依次排行1-5,在 $match中筛选>1的数据,但是不知道该怎么写查询语句
一年多之前 回复
qq969068709
陌路渐远 想法是用类似numcount的控制方法,控制id<firstid,但是firstid是变量名,没办法实现
一年多之前 回复

1个回答

以下语句在mongodb客户端执行,可实现功能
db.info.aggregate([{
$sort: {
_id:1
}
},
{
$group:{
_id: {c1: "$c1",c2:"$c2",c3:"$c3",c4:"$c4"},
count: {$sum: 1},//取得总数
dups: {$addToSet: '$_id'}//暂存_id到set
}
},{
$match:{
count:{$gt:1}//只找出大于1的重复数据

}
}
],{
allowDiskUse:true//因为数据超过16M,得使用硬盘缓存
}).forEach(function(doc){
doc.dups.shift();//把数组的第一个元素从其中删除,并返回第一个元素的值,即不删除第一条
db.info.remove({_id: {$in: doc.dups}});//移除掉剩下的重复数据
})

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐