-2

大家,我想在 java 中创建一个服务类(一个非常通用的),它将接受从 MongoDb 读取集合所需的所有参数。并返回 JSON 字符串作为结果。

4

1 回答 1

0

这是执行此操作的快速指南。

先决条件:用于 mongodb 的 Java 驱动程序。MongoDb的基础知识。

假设:

  1. 传递所有必需的参数以从 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中的基本读操作这非常有用。

于 2013-05-16T13:00:14.837 回答