每個人都在Java中創建的通用服務類,我想在Java中創建服務類(一個非常通用的),這將接受所有必需的參數從MongoDB中讀取的集合。並返回JSON字符串作爲結果。從MongoDB的讀取採集
-2
A
回答
0
下面是執行此操作的快速指南。
先決條件:用於mongodb的Java驅動程序。 MongoDb的基本知識。
假設:
- 所有必需的參數傳遞從MongoDB的讀取集合。
這裏是需要PARAMS的快速列表。
serverNameUrl - 這是mongodb運行的服務器的路徑,例如, 「localhost」
dbName - 數據庫的名稱。說「大學」數據庫。
collectionName - 集合的名稱。
fieldValuePair - 在這裏,我們有兩個seaprators recviing的字段值以字符串形式(:,)。說我們想'名字','Empno','部門''所有員工'部門= ABC'。那麼這個值將是「名稱,Empno,部門:ABC」。
fVSeaprator-用於現場和值這個seaprator字符串,這裏是「:」。在此字段之間用在
vFSeaprator-這seaprator字符串是「」。
sortField-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中的基本讀操作,這非常有用。
相關問題
- 1. 從騾子MongoDB集合中讀取
- 2. C#mongoDB數據採集
- 3. 如何讀取MongoDB的集合
- 4. 從mongodb讀取火花
- 5. 從數據採集單元讀取數據(測量計算)
- 6. 從MongoDB中的副本集分佈式讀取
- 7. 從mongodb中讀取不同於集合實際類的類
- 8. 通過javascript從MongoDB的輔助副本集讀取
- 9. 從MongoDB讀取醃製NumPy數組的子集
- 10. 如何採取MongoDB備份
- 11. 我如何從兩個不同的採集數據在MongoDB中
- 12. 從wavfile標題讀取採樣率
- 13. 從多個MongoDB讀取以形成數據集
- 14. 從讀取mongodb副本集中排除節點
- 15. Mongodb集羣和初級關閉時從輔助節點讀取
- 16. 從大的MongoDB中讀取,寫入JSON
- 17. 採取包括集合的子集
- 18. 從數據集中讀取
- 19. 無鎖mongodb讀取
- 20. MongoDB shell:從控制檯讀取一行
- 21. 從API讀取和更新MongoDB
- 22. MongoDB從數據庫中讀取數據
- 23. Grails 3 MongoDB沒有從application.yml讀取connectionString
- 24. 如何從集合中獲取mongodb
- 25. 如何從mongoDB集合獲取數組?
- 26. 如何讀取mongodb的值?
- 27. 如何讀取的MongoDB
- 28. MongoDB中採取鍵陣列LISTI
- 29. MongoDB的集合取得與
- 30. 無法使用數據採集器讀取下一條記錄
這不是一個非常有建設性的「問題」。如果您需要幫助,請展示一些努力。 – NilsH
@NilsH回去工作! ;) – vikingsteve
@ Nilsh,你是對的,但我也發佈了答案!這是一種方便的方式來設計一個服務,它可以通過排序和基本搜索謂詞讀取任何類型的集合。 –