I have a JUnit rule
called MongoRule
looks like
public class MongoRule extends ExternalResource { private static final Logger LOGGER = LoggerFactory.getLogger(MongoRule.class); private final MongoService mongoService; public MongoRule() throws UnknownHostException { mongoService = new MongoService(getConfiguredHost(), getConfiguredPort(), getConfiguredDatabase()); } @Override protected void before() throws Throwable { LOGGER.info(" Setting up Mongo Database - " + getConfiguredDatabase()); } @Override protected void after() { LOGGER.info("Shutting down the Mongo Database - " + getConfiguredDatabase()); mongoService.getMongo().dropDatabase(getConfiguredDatabase()); } @Nonnull public DB getDatabase() { return mongoService.getMongo().getDB(getConfiguredDatabase()); } @Nonnull public Mongo getMongo() { return mongoService.getMongo(); } @Nonnull public MongoService getMongoService() { return mongoService; } public static int getConfiguredPort() { return Integer.parseInt(System.getProperty("com.db.port", "27017")); } @Nonnull public static String getConfiguredDatabase() { return System.getProperty("com.db.database", "database"); } @Nonnull public static String getConfiguredHost() { return System.getProperty("com.db.host", "127.0.0.1"); } }
Then I try to insert some documents in line with
public static void saveInDatabase() { LOGGER.info("preparing database - saving some documents"); mongoRule.getMongoService().putDocument(document1); mongoRule.getMongoService().putDocument(document2); }
If document1
and document2
are valid DBObject
documents. The circuit looks like
{ Id: 001 date_created: 2012-10-31 vars: { '1': { name: n1 value:v1 } '2': { name: n2 value:v2 } '3': { name: n3 value:v3 } } { Id: 002 date_created: 2012-10-30 vars: { '1': { name: n4 value:v4 } '2': { name: n5 value:v5 } '3': { name: n6 value:v6 } }
Now I am trying to query the collection and get these objects, so I am doing this
public static void getDocuments(List<String> documentIds) { BasicDBList docIds = new BasicDBList(); for (String docId: documentIds) { docIds.add(new BasicDBObject().put("Id", docId)); } DBObject query = new BasicDBObject(); query.put("$in", docIds); DBCursor dbCursor = mongoRule.getDatabase().getCollection("mycollection").find(query); System.out.println(dbCursor == null); if (dbCursor != null) { while (dbCursor.hasNext()) { System.out.println("object - " + dbCursor.next()); } } }
mycollection
is a collection in which all documents are saved, this comes from an external service.
When I run this document, I see the following
preparing database - saving some documents inserting document - DBProposal
This means that collection.find()
could not find these documents.
What am I not doing here? How can I return the documents?
I am very new to using Java
with Mongo
and used this link to build the query
UPDATE
After changing the method of building the request, I still do not see the documents
public static void getDocuments(List<String> documentIds) { BasicDBList docIds = new BasicDBList(); docIds.addAll(documentIds) DBObject query = new BasicDBObject(); query.put("$in", docIds); DBCursor dbCursor = mongoRule.getDatabase().getCollection("mycollection").find(query); System.out.println(dbCursor == null); if (dbCursor != null) { while (dbCursor.hasNext()) { System.out.println("object - " + dbCursor.next()); } } }
and the collection name is returned through
private static String getCollectionName(@Nonnull final DBObject dbObject) { return "mycollection"; }