大家,我想在 java 中创建一个服务类(一个非常通用的),它将接受从 MongoDb 读取集合所需的所有参数。并返回 JSON 字符串作为结果。
1 回答
这是执行此操作的快速指南。
先决条件:用于 mongodb 的 Java 驱动程序。MongoDb的基础知识。
假设:
- 传递所有必需的参数以从 mongoDB 读取集合。
这是所需参数的快速列表。
serverNameUrl - 这是运行 mongodb 的服务器的路径,例如“localhost”
dbName - 数据库的名称。说“大学”数据库。
collectionName - 集合的名称。
fieldValuePair - 在这里,我们使用两个 seaprators(: ,) 以字符串形式接收字段值。假设我们想要' Dept=ABC' 的所有员工的'Name','Empno','Dept '。那么这个值就是“ Name,Empno,Dept:ABC ”。
fVSeaprator - 这个用于字段和值的分隔符字符串,这里是“:”。
vFSeaprator - 在字段之间使用的这个 seaprator 字符串,这里是“,”。
sortField - 排序字段。说empno
sortDirection- Sortdirection 说“-1” DESC(默认为 DESC)。
这是相同的代码!
package com.service.mongo;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.MongoClient;
import com.mongodb.util.JSON;
import com.xp.util.Utils;
public class TestGenericService {
public static void main(String[] args) {
//Start. This return a JSON string.
String result =readQueryOfMongo("localhost","test","employeeCollection","Name,Empno,Dept:ABC",":",",","Empno","");
System.out.println(result);
}
public static String readQueryOfMongo(
String serverNameUrl ,
String dbName ,
String collectionName,
String fieldValuePair,
String fVSeaprator,
String vFSeaprator,
String sortField,
String sortDirection
)
{
DB db;
DBCollection table = null;
DBCursor cursor = null;
String result=null;
BasicDBObject sortPredicate = new BasicDBObject();
try
{
Map<String, String> fieldValuePairMap = new HashMap<String, String>();
System.out.println("ServerName:"+serverNameUrl+"\nDatabase Name:"+dbName+"\nCollection Name:"+collectionName);
//Configure the server, db and collection.
MongoClient mongoClient = new MongoClient( serverNameUrl );
db = mongoClient.getDB( dbName );
System.out.println(db.getLastError());
if (db.collectionExists(collectionName))
{
table = db.getCollection(collectionName);
}
else
{
throw new Exception("Collection doesn't exist");
}
//Define SortPredicate.
if(sortField!= null)
{
if(sortDirection==null ||sortDirection.trim().length()==0)
sortDirection="-1";//Default sort-order should be DESC.
sortPredicate.put(sortField, Integer.parseInt(sortDirection));
}
if (null != fieldValuePair && fieldValuePair.trim().length() > 0)
{
BasicDBObject searchQuery = new BasicDBObject();
fieldValuePairMap = parseStringToMap(fieldValuePair, fVSeaprator, vFSeaprator);
System.out.println(fieldValuePairMap.size());
BasicDBObject fields1 = new BasicDBObject("_id",false);
if(fieldValuePairMap.size()>0)
{
Set keySet = fieldValuePairMap.keySet();
Iterator keyIter = keySet.iterator();
String tempKey;
while (keyIter.hasNext())
{
tempKey = keyIter.next().toString();
fields1.append(tempKey, true);
if(fieldValuePairMap.get(tempKey)!=null)
searchQuery.put(tempKey, fieldValuePairMap.get(tempKey));
}
cursor = table.find(searchQuery,fields1).sort(sortPredicate);
}
}
else
{
cursor = table.find().sort(sortPredicate);
}
result = parseStubJson(cursor, collectionName);
}catch (Exception e) {
e.printStackTrace();
}
return result;
}
public static String parseStubJson(DBCursor dBCursor, String stubName)
{
System.out.println("Creating a JSON stub of:"+stubName);
String response="{"+"\""+stubName+"\":[";
int i=0;
int j= dBCursor.count();
while (dBCursor.hasNext())
{
i++;
response += JSON.parse(dBCursor.next().toString());
if(j>i)
response +=",";
}
response += "]}";
return response;
}
public static Map<String, String> parseStringToMap(String kerValuePair,String seprator1,String seprator2)
{
Map<String, String> myMap = new HashMap<String, String>();
String[] pairs = kerValuePair.split(seprator2);
for (int i=0;i<pairs.length;i++) {
String pair = pairs[i];
String[] keyValue = pair.split(seprator1);
if(keyValue.length > 1)
myMap.put(keyValue[0], keyValue[1]);
else
myMap.put(pairs[i], null);
}
Iterator itr = myMap.entrySet().iterator();
while (itr.hasNext()) {
Object object = (Object) itr.next();
System.out.println(object.toString());
}
return myMap;
}
}
注意:以上代码以 JSON 字符串形式返回结果,您可以在客户端使用任何解析器并将结果转换为所需的列表或存根。是的,你可能会觉得上面的例子是用SQL的心态写的,这不是NOSQL(mongodb)的最佳使用,但是了解mongodb中的基本读操作这非常有用。