Reputation: 389
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!
Upvotes: 4
Views: 23474
Reputation: 2202
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.
Upvotes: 1
Reputation: 527
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"
Upvotes: 0
Reputation: 10794
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();
}
}
Upvotes: 14
Reputation: 9231
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.
Upvotes: 4