2013-04-14 42 views
1

我有一個具有包含下列文件

{ 
    "_id": ObjectId("5161446e03642eab4a818fcd"), 
    "id": "35", 
    "userInfo": { 
    "name": "xyz", 
    "rollNumber": 121 
    } 
} 

我想所有的ID比規定值

越大,行的用戶集合MongoDB數據庫
@GET 
@Path("/query") 
@Produces({ MediaType.APPLICATION_JSON }) 
public List<String> getLactionInfo(@QueryParam("from") int from) { 
    BasicDBObject query = new BasicDBObject(); 
    // check if ids greater than 0 
    query.put("id", new BasicDBObject("$gt", from)); 
    // get the collection of users 
    DBCursor cursor = getTable("users").find(query); 
    List<String> listUsers = new ArrayList<String>(); 
    while (cursor.hasNext()) { 
     DBObject object = cursor.next(); 
     String id = cursor.next().get("_id").toString(); 
     object.put("_id", id); 
     String objectToString = object.toString(); 
     listUsers.add(objectToString); 

    } 

    return listUsers; 
} 

當我調試我的代碼時,它顯示listUsers爲null。另外,當我在控制檯中手動運行下列查詢時,我得不到任何結果。

db.users.find({id:{$gt:60}}) 

回答

1

在您的樣本數據id存儲爲string。因此,$gt檢查正試圖將integerstring進行比較。

如果您將id值切換爲integer,它應該按預期工作。

例如:

db.test.insert({ "id": 40, "name": "wired" }) 
db.test.insert({ "id": 60, "name": "prairie" }) 
db.test.insert({ "id": 70, "name": "stack" }) 
db.test.insert({ "id": 80, "name": "overflow" }) 
db.test.insert({ "id": "90", "name": "missing" }) 

然後,測試:

> db.test.find({"id": { "$gt": 60 }}).pretty() 
{ 
     "_id" : ObjectId("516abfdf8e7f7f35107081cc"), 
     "id" : 70, 
     "name" : "stack" 
} 
{ 
     "_id" : ObjectId("516abfe08e7f7f35107081cd"), 
     "id" : 80, 
     "name" : "overflow" 
} 

對於一個快速的數據修復了,你可以從殼做這樣的事情(粘貼爲一行,並改變myCollection到您的收藏名稱:

db.myCollection.find().forEach(function(doc) { doc.id = parseInt(doc.id, 10); 
    db.test.save(doc); }) 
+0

感謝所有幫助,我真的很愚蠢, rivial。 –