From c6b48d83f64f980663a482eda2b4108e754db0a4 Mon Sep 17 00:00:00 2001 From: lin <752873537@qq.com> Date: Thu, 14 Nov 2019 20:27:14 +0800 Subject: [PATCH] =?UTF-8?q?#2339=20=E4=BF=AE=E6=94=B9mongdbDriver=202.11?= =?UTF-8?q?=20->=203.11=20=E6=94=AF=E6=8C=81mongdb4.0=20=E4=BF=AE=E6=94=B9?= =?UTF-8?q?mongdb=E6=8F=92=E5=85=A5=E6=94=AF=E6=8C=81=E5=A4=9A=E8=A1=8C?= =?UTF-8?q?=E6=8F=92=E5=85=A5=20=E4=BF=AE=E6=94=B9mongdb=E5=A2=9E=E5=88=A0?= =?UTF-8?q?=E6=94=B9=E8=BF=94=E5=9B=9E=E5=BD=B1=E5=93=8D=E8=A1=8C=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../mycat/backend/jdbc/mongodb/MongoData.java | 32 ++++++++------- .../backend/jdbc/mongodb/MongoSQLParser.java | 40 +++++++++---------- 3 files changed, 38 insertions(+), 36 deletions(-) diff --git a/pom.xml b/pom.xml index aceec816f..310961f81 100644 --- a/pom.xml +++ b/pom.xml @@ -48,7 +48,7 @@ org.mongodb mongo-java-driver - 2.11.4 + 3.11.0 org.iq80.leveldb diff --git a/src/main/java/io/mycat/backend/jdbc/mongodb/MongoData.java b/src/main/java/io/mycat/backend/jdbc/mongodb/MongoData.java index 86bba46bc..0bb143af1 100644 --- a/src/main/java/io/mycat/backend/jdbc/mongodb/MongoData.java +++ b/src/main/java/io/mycat/backend/jdbc/mongodb/MongoData.java @@ -53,20 +53,24 @@ public BasicDBList getGrouyBys() { else { return null; } - } - public void setGrouyBy(DBObject gb) { - this.groupby=gb; - this.type=true; - if (gb instanceof BasicDBList) { - Object gb2=((BasicDBList)gb).get(0); - if (gb2 instanceof DBObject) { - for (String field :((DBObject)gb2).keySet()) { - Object val = ((DBObject)gb2).get(field); - setField(field,getObjectToType(val)); - } - } - } - } + } + + public void setGrouyBy(DBObject gb) { + this.groupby = gb; + this.type = true; + if (gb instanceof BasicDBList) { + BasicDBList basicDBList = (BasicDBList)gb; + if(!basicDBList.isEmpty()){ + Object gb2 = basicDBList.get(0); + if (gb2 instanceof DBObject) { + for (String field : ((DBObject) gb2).keySet()) { + Object val = ((DBObject) gb2).get(field); + setField(field, getObjectToType(val)); + } + } + } + } + } public static int getObjectToType(Object ob){ if (ob instanceof Integer) { diff --git a/src/main/java/io/mycat/backend/jdbc/mongodb/MongoSQLParser.java b/src/main/java/io/mycat/backend/jdbc/mongodb/MongoSQLParser.java index 3d7b49460..00ad51688 100644 --- a/src/main/java/io/mycat/backend/jdbc/mongodb/MongoSQLParser.java +++ b/src/main/java/io/mycat/backend/jdbc/mongodb/MongoSQLParser.java @@ -6,15 +6,10 @@ import java.util.List; +import com.mongodb.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.mongodb.BasicDBList; -import com.mongodb.BasicDBObject; -import com.mongodb.DB; -import com.mongodb.DBCollection; -import com.mongodb.DBCursor; -import com.mongodb.DBObject; import com.alibaba.druid.sql.ast.SQLExpr; import com.alibaba.druid.sql.ast.SQLOrderingSpecification; import com.alibaba.druid.sql.ast.SQLStatement; @@ -186,15 +181,20 @@ private int InsertData(SQLInsertStatement state) { throw new RuntimeException("number of values and columns have to match"); } SQLTableSource table=state.getTableSource(); - BasicDBObject o = new BasicDBObject(); - int i=0; - for(SQLExpr col : state.getColumns()) { - o.put(getFieldName2(col), getExpValue(state.getValues().getValues().get(i))); - i++; - } + BasicDBObject[] oList = new BasicDBObject[state.getValuesList().size()]; + int i = 0; + for(SQLInsertStatement.ValuesClause values : state.getValuesList()){ + int j = 0; + BasicDBObject o = new BasicDBObject(); + oList[i++] = o ; + for(SQLExpr col : state.getColumns()) { + o.put(getFieldName2(col), getExpValue(values.getValues().get(j++))); + } + } + DBCollection coll =this._db.getCollection(table.toString()); - coll.insert(new DBObject[] { o }); - return 1; + WriteResult result = coll.insert(oList); + return i; // 这里result.getN 总是返回0 , 所以按插入数据量返回影响行数 } private int UpData(SQLUpdateStatement state) { SQLTableSource table=state.getTableSource(); @@ -208,9 +208,9 @@ private int UpData(SQLUpdateStatement state) { set.put(getFieldName2(col.getColumn()), getExpValue(col.getValue())); } DBObject mod = new BasicDBObject("$set", set); - coll.updateMulti(query, mod); + WriteResult result = coll.updateMulti(query, mod); //System.out.println("changs count:"+coll.getStats().size()); - return 1; + return result.getN(); } private int DeleteDate(SQLDeleteStatement state) { SQLTableSource table=state.getTableSource(); @@ -221,11 +221,9 @@ private int DeleteDate(SQLDeleteStatement state) { throw new RuntimeException("not where of sql"); } DBObject query = parserWhere(expr); - - coll.remove(query); - - return 1; - + + WriteResult result = coll.remove(query); + return result.getN(); } private int dropTable(SQLDropTableStatement state) { for (SQLTableSource table : state.getTableSources()){