2013-05-16 36 views
-2

每個人都在Java中創建的通用服務類,我想在Java中創建服務類(一個非常通用的),這將接受所有必需的參數從MongoDB中讀取的集合。並返回JSON字符串作爲結果。從MongoDB的讀取採集

+0

這不是一個非常有建設性的「問題」。如果您需要幫助,請展示一些努力。 – NilsH

+1

@NilsH回去工作! ;) – vikingsteve

+0

@ Nilsh,你是對的,但我也發佈了答案!這是一種方便的方式來設計一個服務,它可以通過排序和基本搜索謂詞讀取任何類型的集合。 –

回答

0

下面是執行此操作的快速指南。

先決條件:用於mongodb的Java驅動程序。 MongoDb的基本知識。

假設:

  1. 所有必需的參數傳遞從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中的基本讀操作,這非常有用。