Browse Source

支持mongodb

mxd 5 years ago
parent
commit
26ff1f9a36

+ 5 - 0
pom.xml

@@ -56,6 +56,11 @@
             <artifactId>spring-boot-starter-data-redis</artifactId>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-mongodb</artifactId>
+            <scope>provided</scope>
+        </dependency>
         <dependency>
             <groupId>commons-beanutils</groupId>
             <artifactId>commons-beanutils</artifactId>

+ 68 - 0
src/main/java/org/ssssssss/magicapi/functions/MongoCollectionExtension.java

@@ -0,0 +1,68 @@
+package org.ssssssss.magicapi.functions;
+
+import com.mongodb.client.FindIterable;
+import com.mongodb.client.MongoCollection;
+import com.mongodb.client.model.UpdateOptions;
+import org.bson.Document;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * MongoCollection方法扩展
+ */
+public class MongoCollectionExtension {
+
+	public static void insert(MongoCollection<Document> collection, List<Map<String, Object>> maps) {
+		collection.insertMany(maps.stream().map(Document::new).collect(Collectors.toList()));
+	}
+
+	public static void insert(MongoCollection<Document> collection, Map<String, Object> map) {
+		insert(collection, Collections.singletonList(map));
+	}
+
+	public static FindIterable<Document> find(MongoCollection<Document> collection, Map<String, Object> query) {
+		return collection.find(new Document(query));
+	}
+
+	public static long update(MongoCollection<Document> collection, Map<String, Object> query, Map<String, Object> update) {
+		return collection.updateOne(new Document(query), new Document(update)).getModifiedCount();
+	}
+
+	public static long updateMany(MongoCollection<Document> collection, Map<String, Object> query, Map<String, Object> update) {
+		return collection.updateMany(new Document(query), new Document(update)).getModifiedCount();
+	}
+
+	public static long updateMany(MongoCollection<Document> collection, Map<String, Object> query, Map<String, Object> update, Map<String, Object> filters) {
+		UpdateOptions updateOptions = new UpdateOptions();
+		if (filters != null && !filters.isEmpty()) {
+			Object upsert = filters.get("upsert");
+			if (upsert != null) {
+				filters.remove("upsert");
+				updateOptions.upsert(Boolean.parseBoolean(upsert.toString()));
+			}
+			Object bypassDocumentValidation = filters.get("bypassDocumentValidation");
+			if (bypassDocumentValidation != null) {
+				filters.remove("bypassDocumentValidation");
+				updateOptions.bypassDocumentValidation(Boolean.parseBoolean(bypassDocumentValidation.toString()));
+			}
+			List<Document> arrayFilters = filters.entrySet().stream().map(entry -> new Document(entry.getKey(), entry.getValue())).collect(Collectors.toList());
+			updateOptions.arrayFilters(arrayFilters);
+		}
+		return collection.updateMany(new Document(query), new Document(update), updateOptions).getModifiedCount();
+	}
+
+	public static long count(MongoCollection<Document> collection, Map<String, Object> query) {
+		return collection.count(new Document(query));
+	}
+
+	public static long remove(MongoCollection<Document> collection, Map<String, Object> query) {
+		return collection.deleteMany(new Document(query)).getDeletedCount();
+	}
+
+	public static long removeOne(MongoCollection<Document> collection, Map<String, Object> query) {
+		return collection.deleteOne(new Document(query)).getDeletedCount();
+	}
+}

+ 25 - 0
src/main/java/org/ssssssss/magicapi/functions/MongoFindIterableExtension.java

@@ -0,0 +1,25 @@
+package org.ssssssss.magicapi.functions;
+
+import com.mongodb.client.FindIterable;
+import com.mongodb.client.MongoCursor;
+import org.bson.Document;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Mongo FindIterable 方法扩展
+ */
+public class MongoFindIterableExtension {
+
+	public static List<Map<String, Object>> list(FindIterable<Document> iterable) {
+		MongoCursor<Document> cursor = iterable.iterator();
+		List<Map<String, Object>> result = new ArrayList<>();
+		while (cursor.hasNext()) {
+			result.add(cursor.next());
+		}
+		return result;
+	}
+
+}

+ 31 - 0
src/main/java/org/ssssssss/magicapi/functions/MongoFunctions.java

@@ -0,0 +1,31 @@
+package org.ssssssss.magicapi.functions;
+
+import com.mongodb.MongoClient;
+import com.mongodb.client.MongoCollection;
+import org.ssssssss.magicapi.config.MagicModule;
+
+import java.util.HashMap;
+
+public class MongoFunctions extends HashMap<String,Object> implements MagicModule {
+
+	private MongoClient mongoClient;
+
+	public MongoFunctions(MongoClient mongoClient) {
+		this.mongoClient = mongoClient;
+	}
+
+	@Override
+	public Object get(Object database) {
+		return database == null ? null : new HashMap<String, MongoCollection>(){
+			@Override
+			public MongoCollection get(Object collection) {
+				return collection == null ? null : mongoClient.getDatabase(database.toString()).getCollection(collection.toString());
+			}
+		};
+	}
+
+	@Override
+	public String getModuleName() {
+		return "mongo";
+	}
+}