Storm
Storm

Reputation: 397

How to retrieve / find all elements of a nested array in MongoDB Java

I am trying to find / load all elements in the "nodes" array into a Java List or Hashmap.

I'm dealing with a specific JSON format that I cannot modify. The Mongo DB collection contains only one document, and that document is shown below. I am trying to query all elements of the "nodes" array but can't manage to do so.

MongoCollection<Document> collection = mongoDB.getCollection(collectionName); 
BasicDBObject query = new BasicDBObject();
query.put("nodes", "");
List<Document> test2 = collection.find(query).into(new ArrayList<Document>());

Test2 returns NULL at the moment. I know I'm wrong but can't figure out how to do it. And here is the JSON

{
  "_id": "12123434",
  "nodes": [
    {
      "id": "1",
      "name": "bla",
      "attributes": [
        "string1",
        "string2"
      ]
    },
    {
      "id": "2",
      "name": "blabla",
      "attributes": [
        "string1",
        "string2"
      ]
    }
  ],
  "groups": []
}

Upvotes: 0

Views: 3920

Answers (2)

Ali
Ali

Reputation: 103

Thank you Sagar, your code snippet helped me a lot. Just in case if someone wants to target the filtering on a field (ex - id) within the nodes document then the following can be used.

List<Document> nodes =  (List<Document>) collection.find().projection(elemMatch("nodes",new Document("id",2))).map(document -> document.get("nodes")).first();

Upvotes: 0

s7vr
s7vr

Reputation: 75924

You just need to project nodes and map.

import static com.mongodb.client.model.Projections.*;

List<Document> nodes = (List<Document>) collection.find().projection(fields(include("nodes"), excludeId())).map(document -> document.get("nodes")).first();

Upvotes: 2

Related Questions