2013-02-08 5 views
0

je le document structuré comme indiqué hererequête complexe Mongo DB - documents sous

Je voudrais obtenir une collection de moduleDataItems qui a la version dire plus de 0.

C'est ma tentative:

  Query qu = Query.query(Criteria.where("appKey") 
        .is("MOCK_APP").and("modules._id") 
        .is("APP_1_MOD_1") 
        .and("modules.moduleDataItems.version") 
        .gt(0)); 

      List<DataItem> dList = mongoTemplate.find(qu, 
        DataItem.class, 
        ApplicationConstants.MONGO_APPLICATION_COLLECTION_NAME); 

Je suis assez sûr que je ne fais pas la bonne chose. Je ne reçois aucun DataItem dans le résultat.

Les classes représentent la structure json.

Toute aide est appréciée.

Merci

Répondre

2

finalement résolu à l'aide de cette -

DBObject unwindParam = new BasicDBObject("$unwind","$dataItems"); 
    DBObject matchParam = new BasicDBObject("$match", 
             new BasicDBObject("dataItems.version", 
      new BasicDBObject("$gt",requestedModule.getVersion())));          
    DBObject fields = new BasicDBObject("dataItems", 1); 
    DBObject projectParam = new BasicDBObject("$project", fields); 
    AggregationOutput output = mongoTemplate.getCollection(
            "appModules").aggregate(
            unwindParam, matchParam,projectParam); 
    CommandResult updatedData = output.getCommandResult(); 
    BasicDBList resList = (BasicDBList) updatedData.get("result");