2015-10-17 121 views
0

首先,讓我說我是一個新手,因此不可能像問題一樣清楚地問這個問題。這裏去如何指定鍵值對

從java我正在調用一個函數FindName(int,string)(下面的代碼片段),我得到DBObject ref語句的JSONParser錯誤。如果硬編碼值對,代碼工作正常,但目標是調用例程傳遞不同的值並獲得正確的結果。

傳遞的值是有效的,我甚至println來驗證值。

問題似乎是,即使值是有效的int和字符串,mongodb似乎不允許您指定在鍵值對中傳遞給此函數的值的名稱。

因此,我猜你需要將傳入的日期,名稱值轉換爲鍵值對可接受的格式。問題是如何做到這一點。

靜態字符串FindName(INT日期,字符串名稱)

MongoClient mongoClient; 
     try { 
      mongoClient = new MongoClient("xxx.xx.xx.xxx",27017); 
     } 
     catch (UnknownHostException e) 
     { 
     e.printStackTrace(); 
     return name; 
     } 
     DB db = mongoClient.getDB("tpfdf"); 
     DBCollection PNR = db.getCollection("PNR"); 
     DBObject ref = (DBObject) JSON.parse("{PnrByDateFlightCustom: {date: date), pname: name'}}"); 

at com.mongodb.util.JSONParser.parse(JSON.java:208) 
     at com.mongodb.util.JSONParser.parseObject(JSON.java:241) 
     at com.mongodb.util.JSONParser.parse(JSON.java:205) 
     at com.mongodb.util.JSONParser.parseObject(JSON.java:241) 
     at com.mongodb.util.JSONParser.parse(JSON.java:205) 
     at com.mongodb.util.JSONParser.parse(JSON.java:155) 
     at com.mongodb.util.JSON.parse(JSON.java:93) 
     at com.mongodb.util.JSON.parse(JSON.java:74) 
     at MongoDB5.locatePassengerName(MongoDB5.java:38) 
     at MongoDB5.main(MongoDB5.java:11) 
+0

這看起來不正確:{date:date)。嘗試{date:date} – duffymo

+0

謝謝,但是當我發佈複製的代碼時,這是一個手指檢查,但要清楚,錯誤仍然存​​在... {PnrByDateFlightCustom:{date:date,name:name }} ^ at com.mongodb.util.JSONParser.parse(JSON.java:208) at com.mongodb.util.JSONParser.parseObject(JSON.java:241) –

回答

0

更新。經過許多試驗和錯誤之後,我發現如果你動態地構建字符串,然後用動態字符串執行ref,它就可以工作。

這工作。我不知道這是否是對此進行編碼的正確方法,但是這種方法現在可以使用。

String mdbStr = "{PnrByDateCustom: {date:" + value + "}}"; 
    System.out.println("mdbStr = " + mdbStr); 

    DB db = mongoClient.getDB("tpfdf"); 
    DBCollection PNR = db.getCollection("PNR"); 
    DBObject ref = (DBObject) JSON.parse("{}"); 

// REF =(DBOBJECT)JSON.parse( 「{PnrByDateCustom:{日期:值}}」);

ref = (DBObject) JSON.parse(mdbStr);