2012-10-09 72 views
4

我正在嘗試使用QueryBuilder(MongoDB Java API 2.9.1)構建$ in查詢。當查詢是一個字符串數組時,我沒有問題,但是當我嘗試使用一個ObjectId數組時它不起作用(不返回任何內容)。如何在MongoDB中使用QueryBuilder構建ObjectIds查詢

我能夠成功運行查詢,並從控制檯結果:

查詢控制檯: db.collection.find({刪除:假的,APP_ID:{$於:[的ObjectId(」 4f75c533ac99d845186e19b2 「),的ObjectId(」 4f75c533ac99d845186e19b3" )]}})由QueryBuilder的創建

查詢(MongoDB中的Java API 2.9.1):

對象[] IDS; (ids).and(「removed」)。is(false).get();返回值類型爲().disableId();}}。在DBOBJECT

的ToString生產: { 「APP_ID」:{ 「$的」:[{ 「$ OID」: 「4f75c533ac99d845186e19b2」}]}, 「刪除」:假}

不知道如果我做錯了什麼或者API不支持和$在ObjectId類型的查詢中。有任何想法嗎?

+0

也許只是一個錯字,但你的外殼採用「APPLICATION_ID」和'ToString'輸出呈現「APP_ID 」。 – JohnnyHK

+0

對不起toString輸出是正確的。它應該讀取app_id而不是application_id。我會更新這個問題。 – AaronE

+0

在您的控制檯查詢中,您的數組中有兩個目標,但是當您在Java代碼中運行它時,您只有一個對象ID,所以也許這就是爲什麼沒有任何內容與查詢匹配的原因。這是一個錯字嗎?嘗試打印出您的IDS數組,您是否將正確的東西傳遞給.in()?這是一個錯字嗎? – Louisa

回答

-2

你的ID應該org.bson.types.ObjectId類型等等這樣的事情應該工作:

import org.bson.types.ObjectId; 

ObjectId[] ids = new ObjectId[]{ 
    new ObjectId("1234568abcd"), 
    new ObjectId("1234567abcd")}; 

DBObject query = QueryBuilder.start("app_id").in(ids) 
    .and("removed").is(false).get();