复杂的Mongo数据库查询 - 子文档

时间:2013-02-08 00:35:31

标签: java mongodb spring-data-mongodb

我的文档结构如here

所示

我想获得一个moduleDataItems的集合,其版本大于0。

这是我的尝试:

            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);

我很确定我做的不对。我在结果中没有得到任何DataItem。

这些类代表json结构。

感谢任何帮助。

由于

1 个答案:

答案 0 :(得分:2)

最后用这个解决了它 -

    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");