2012-10-09 5 views
4

J'essaye de construire une requête $ in avec QueryBuilder (MongoDB Java API 2.9.1). Je n'ai aucun problème quand la requête est un tableau de chaînes mais quand j'essaye avec un tableau d'ObjectIds cela ne fonctionne pas (ne retourne rien).

Je suis en mesure d'exécuter la requête avec succès et obtenir un résultat de la console:

requête dans la console: db.collection.find ({enlevé: false, app_id: {$ dans: [ObjectId (» 4f75c533ac99d845186e19b2 "), ObjectId (" 4f75c533ac99d845186e19b3")]}})

requête créée par QueryBuilder (MongoDB API Java 2.9.1):

Object [] ids;

Code Java: DBObject query = QueryBuilder.start ("app_id"). Dans (ids) .and ("removed"). Est (false) .get();

ToString sur dbobject produit: { "app_id": { "in $": [{ "oid $": "4f75c533ac99d845186e19b2"}]}, "enlevé": false}

Je ne sais pas si je suis faire quelque chose de mal ou l'API ne supporte pas et $ dans la requête de type ObjectId. Des idées?

+0

Peut-être juste une faute de frappe, mais que vous utilisez « application_id » dans la coquille et la sortie 'de ToString' affiche « app_id ". – JohnnyHK

+0

Désolé, la sortie toString est correcte. Il devrait lire app_id au lieu de application_id. Je vais mettre à jour la question. – AaronE

+0

Dans votre requête console, vous avez deux objectifs dans votre tableau, mais lorsque vous l'exécutez dans votre code Java, vous n'avez qu'un seul ID d'objet, alors peut-être que rien ne correspond à la requête. Est-ce une faute de frappe? Essayez d'imprimer votre tableau d'ids, passez-vous la bonne chose dans votre .in()? Est-ce une faute de frappe? – Louisa

Répondre

-2

Vos ids doivent être de type org.bson.types.ObjectId donc quelque chose comme cela devrait fonctionner:

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(); 
Questions connexes