项目中用到mongo,想做一段类似sql 中的delete from table where id in (ids)的操作,折腾一番,实现如下
1 查找ids
var ids = db.getCollection('stock_report_income_tushare').aggregate([
{$group : {_id : {'ts_code':'$ts_code','end_date':'$end_date'}, num_sum : {$sum : 1}, maxid : {$max : '$_id'}}},
{ $match : { num_sum : { $gt : 1} } },
{ $project : { maxid : 1,_id:0}}
]).map(function(doc) { return doc.maxid; });
$group作为分组条件以及取得的分组字段
$match 类似于 having
$project 类似于group完之后再嵌套一层select的字段,上例只取maxid
map是对整个查询结果做一个迭代,javascript语法,我只需要分组数据的id数组
2 db.stock_report_income_tushare.remove({_id: {$in: ids}})
第二部删除id in ids的数据,可以看出,利用javascript语法的特性之后,mongo的shell脚本能实现非常强大的功能,使用非常方便,比sql强大
网友评论