4

I'm having a little trouble with a query in Java on a MongoDB.

I have the follow structure in the database:

            {
              "_id" : ObjectId("5059c214707747cbc5819f6f"),
              "id" : "7",
              "title" : "test4",
              "keywords" : "keyword 1, keyword 2",

              "partner" : {
                "id" : "1",
                "name" : "partner",
                "keywords" : "partner keyword 1, partner keyword 2"
              },
              "status" : {
                "id" : "0",
                "name" : "Expired"
              },

              "modified" : "2012-09-27"
            }

I want the query the database for the field 'Status.name', example SELECT * FROM table WHERE status.name = 'Expired'

How would I do such a query in Java for MongoDB?

Thanks for any help or suggestions!

1

4 Answers 4

14

Here is an example:

import com.mongodb.Mongo;
import com.mongodb.DBCollection;
import com.mongodb.BasicDBObject;
import com.mongodb.DBCursor;
import com.mongodb.DB;

public class MongoTest {

    public static void main(String[] args) throws Exception {

        // connect to the local database server
        Mongo m = new Mongo();

        DB db = m.getDB( "test" );

        DBCollection coll = db.getCollection("test");

        // delete all the data from the 'test' collection
        coll.drop();

        // make a document
        BasicDBObject doc = new BasicDBObject();

        doc.put("id", 7);
        doc.put("title", "test4");
        doc.put("modified", "2012-09-27");

        BasicDBObject status = new BasicDBObject();

        status.put("id", "1");
        status.put("name", "Expired");

        doc.put("status", status);

        // insert
        coll.insert(doc);

        BasicDBObject query = new BasicDBObject("status.name", "Expired");

        //  run the query and print the results out
        DBCursor cursor = coll.find(query);

        try {
            while (cursor.hasNext()) {
                System.out.println(cursor.next());
            }
        } finally {
            cursor.close();
        }

        m.close();
    }
}
Sign up to request clarification or add additional context in comments.

Comments

4

MongoDB uses a 'match object' as a query. So to find objects that have status.name equal to "Expired", you could feed an object like such:

{ "status.name": "Expired" }

From Java you'll need to create a DBOjbect like the above to use as the match (returning everything that ... matches with the match object) and send that to the database as a query. Assuming you'll have a connection to MongoDB from Java, use the find-method to execute the query you're after.

Comments

1

With MongoDB Java Driver v3.2.2 you can do something like this:

FindIterable<Document> iterable = collection.find(Document.parse("{\"status.name\": \"Expired\"}"));

This returns all documents containing "Expired" in the status.name nested field.

Comments

0
BasicDBObject query = new BasicDBObject();

List<BasicDBObject> ob = new ArrayList<BasicDBObject>();

ob.add(new BasicDBObject("status.name", "Expired"));

List<BasicDBObject> foundDocument =   table.find(query)into(new ArrayList<BasicDBObject>());

for (int i = 0; i < foundDocument.size(); i++) {

System.out.println(foundDocument.get(i));
}

This will print all the rows having status as "Expired"

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.