查询嵌入文档的数组

时间:2014-10-24 09:51:32

标签: mongodb mapreduce mongodb-query aggregation-framework spring-data-mongodb

我有一个像MongoDB中保存的文档列表:

{
    "_id" : "f9f44e87-4260-4699-99a6-af6b58b4fb7e",
    "address" : {},
    "lastUpdate" : "1414083484838",
    "listvalues" : {},
    "userModels" : {
        "5067" : {            
            "generated_date_timestamp" : NumberLong(1413985161866),
            "model_id" : 5067,
            "score_id" : {
                "0" : {
                    "score_level_id" : 5267,
                    "confidence" : 0,
                    "generated_timestamp" : NumberLong(1413985161866)
                }
            },
            "points" : 0,
            "delta_points" : 0,
            "override_model" : 0,
            "override_score" : 0,
        },
        "5079" : {
            "generated_date_timestamp" : NumberLong(1413985161866),
            "model_id" : 5079,
            "score_id" : {
                "0" : {
                    "score_level_id" : 5292,
                    "confidence" : 0,
                    "generated_timestamp" : NumberLong(1413985161866)
                }
            },
            "points" : 0,
            "delta_points" : 0,
            "override_model" : 0,
            "override_score" : 0,
        },
        "5080" : {
            "_class" : "com.mediresource.datatype.model.bean.Model",
            "generated_date_timestamp" : NumberLong(1413985161866),
            "model_id" : 5080,
            "score_id" : {
                "0" : {
                    "score_level_id" : 5294,
                    "confidence" : 0,
                    "generated_timestamp" : NumberLong(1413985161866)
                }
            },
            "points" : 100,
            "delta_points" : 0,
            "override_model" : 0,
            "override_score" : 0,
        }
    }
}

我需要计算mongoDB中所有_id有多少&#34; userModels&#34;,有多少0点。我在这里保存的是一个定义为UserModels<Integer, Model>的Java HashMap。

这是我尝试使用的查询,但没有成功:

db.anonProfile.find(
   { "userModels": { $elemMatch: { "points":  { $gte: 0 } } } }
).size();

有任何线索吗?

1 个答案:

答案 0 :(得分:1)

您可以将其与spring-data mongodb一起使用,如:

Criteria criteria=Criteria.where("userModels.points").gte(0));
Aggregration aggregration=newAggregration(unwind("userModels"),match(criteria),group("_id").count().as("param"));

但我无法理解为什么你使用userModels下的数字。这不好。因为我没有使用numbers下的userModels