mongodb 常用语句

不积跬步,无以至千里;不积小流,无以成江海。

【修改-update】-------------------------------------------------------------

语法格式如下:

db.collection.update(
  <query>,
  <update>,
  {
    upsert:<boolean>,
    multi:<boolean>,
    writeConcern:<document>
  }
)

参数说明:

  • query:update的查询条件,类似sql update查询内where后面的。
  • update:update的对象和一些更新符的操作(如$,$inc...)等,也可以理解为sql update查询内set后面的内容
  • upsert:可选,意思事如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi:可选,默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
  • writeConcern:可选,抛出异常的级别

例如:db.getCollection('CollectionName').update({xm:'张三0',xmpy:'zs0'},{$set:{xb:'0'}},{multi:true});

 

【索引】 ----------------------------------------------------

创建索引:

 db.CollectionName.ensureIndex({"字段名":-1}) 

 db.CollectionName.createIndex({"字段名":"hashed"})

 

查询条件中针对某个字段使用大于、大于等于、小于、小于等于、等于、不等于判断

$gt: 大于

$gte: 大于等于

$lt: 小于 

$lte: 小于等于

$eq: 等于 

$ne: 不等于

 

#相当于mysql里面的 select dm,count(distict dmmc) from tabelName group by dm
db.CollectionName.aggregate([   {$group:{_id:{
"dm" : "$dm"},uniqueCount: {$addToSet: "$dmmc"}}},   {$project:{"dm":1,tj:{$size:"$uniqueCount"}} } ]);

 

#修改字段
db.表名.update({},{$unset:{"原来的字段":"新字段","原来的字段":"新字段"}})
#删除字段
db.表名.update({},{$unset:{"原来的字段":"","原来的字段":""}})

 

 

#指定返回字段
db.getCollection("表名").find({"查询字段":"01"},{字段名:1,字段名:1})
#聚合查询多个字段以XX开头的数据

var res = db.表名.aggregate([
  {$match:{$or:[
      {"字段名":{$regex:"^61.*"}},
      {"字段名":{$regex:"^61.*"}},
    ]}
  }
])
while(res.hasNext()){
  var re = res.next();
  db.另一个表名.insert(re);
}

#或者查询对应Java代码

 

 

 

#普通的统计 带多条件查询  分组统计多字段
db.CollectionName.aggregate([ {$match: { $and: [ {"dm" : { "$regex" : "1"}}, {"dmlx":"MAP_HYZK"} ] }}, {$group: { "_id" : {"dmlx":"$dmlx","dm":"$dm"}, tj : { $sum : 1}}} ])
#普通的统计 带多条件查询  分组统计单字段
db.CollectionName.aggregate([
    {$match:
    { 
        $and:
        [
            {"dm" : { "$regex" : "1"}},
            {"dmlx":"MAP_HYZK"}
        ]
    }},
    {$group: { "_id" : "$dmlx", tj : { $sum : 1}}}
])
 

 

//把查出来的数据进行逗号,拼接
db.表名.aggregate([ {$match: { $and: [ {"dm" : { "$regex" : "1"}}, {"dmlx":"MAP_HYZK"} ] }}, {$group: { "_id" : "$post", "dmmc" : { "$push" : "$dmmc"}}} ])

///////////////匹配的java代码
Aggregation aggregation = Aggregation.newAggregation(
    Aggregation.match(匹配查询条件),
    Aggregation.group("dmlx").push("$dmmc").as("dmmc"),
    Aggregation.project("dmmc")
);
AggregationResults<实体类> results = mongoTemplate.aggregate(aggregation, "表名", 实体类.class);
System.out.println("打印获得数据=="+results.getMappedResults().get(0).get字段名);
 

 

 //把细类字段有,的数据查询出来遍历
db.getCollection("CollectionName").find({"fkmc": {"$regex":","}}). forEach(
function(item) { var tmp = []; var pjtmp = ""; tmp = item.fkmc.split(",");//逗号分割为数组 for(var k in tmp){ var fhmc = db.getCollection('CollectionName').findOne({"fkzd":tmp[k]},{"fkzd":1});//然后通过分割的细类代码去查询返回名称 if(fhmc!=null){ print("====="+fhmc.fkzd); pjtmp = pjtmp + fhmc.fkzd + ","; } } print("打印获得的值:"+pjtmp); item.zddm = pjtmp.substr(0,pjtmp.length-1); db.getCollection('CollectionName').save(item);//将修改的数据保存 //print(item.zddm); } );

 

 【聚合查询】--------------------------------------------

带split字段分割,再group统计
db.getCollection('').aggregate([
  {$match: { "模糊查询字段" : { "$regex" : "^6101.*"}}},
  {$project : { zdrylb : { $split: ["$zdrylbdm", ","] },gxdwjgdm:1} },
  {$unwind:"$zdrylb"},
  {$group : {_id : "$zdrylb", num : {$sum : 1}}}
])


///////////////////////匹配对应的java代码
Pattern pattern = Pattern.compile("^"+dlrdwdm+".*");
//需要分组的字段名
Aggregation aggregation = Aggregation.newAggregation(
        Aggregation.match(Criteria.where("gxdwjgdm").is(pattern)),
        Aggregation.project().andExpression("{ $split: {'$zdrylbdm', ','} }").as("zdrylb"),
        //Aggregation.project().andExpression("{ $substrCP: { '$gxdwjgdm', 0, "+t+" } }").as("gxdwjgdmqz"),
        Aggregation.unwind("$zdrylb"),
        Aggregation.group("$zdrylb").count().as("y"),//.first("$_id").as("x"),
        Aggregation.project("y").and("$_id").as("x")//.previousOperation()
);
AggregationResults<MessageCountTwoVo> outputTypeCount = mongoTemplate.aggregate(aggregation, "t_ythgk_zdry", MessageCountTwoVo.class);
List<MessageCountTwoVo> list = outputTypeCount.getMappedResults();

 

带模糊查询多个字段,再group,并重命名返回字段

db.表名.aggregate([
    {$match:{
        $and:
            [{ "gxdwjgdm" : { "$regex" : "^6101[0-9][1-9].*000000$"}},
            {"zdrylbdm":"01"}]
    }},
    {$group: { "_id" : "$gxdwjgdm", "y" : { "$sum" : 1}, "x" : { "$first" : "$gxdwjgdm"}}},
    {$project: {
        "x": 1,
        "y": 1
    }}
]);
///////////////////////匹配对应的java代码 Pattern pattern1 = Pattern.compile(zz); Aggregation aggregation = Aggregation.newAggregation( Aggregation.match(Criteria.where("gxdwjgdm").is(pattern1).and("zdrylbdm").regex(zdrylbdm)), Aggregation.group("gxdwjgdm").count().as("count").first("gxdwjgdm").as("name"), Aggregation.project("count","name")//.previousOperation() ); AggregationResults<MessageCountVo> outputTypeCount = mongoTemplate.aggregate(aggregation, "t_ythgk_zdry", MessageCountVo.class); List<MessageCountVo> list = outputTypeCount.getMappedResults();

 

posted @ 2022-07-22 10:05  阿迪di  阅读(105)  评论(0编辑  收藏  举报
Title