陌路渐远
2019-01-10 15:09
采纳率: 2.4%
浏览 5.7k

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
        }
    }
}

])

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • 陌路渐远 2019-01-13 12:31
    已采纳

    以下语句在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}});//移除掉剩下的重复数据
    })

    点赞 打赏 评论

相关推荐 更多相似问题