Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb Mongo中带聚合的嵌套查询_Mongodb_Database - Fatal编程技术网

Mongodb Mongo中带聚合的嵌套查询

Mongodb Mongo中带聚合的嵌套查询,mongodb,database,Mongodb,Database,我在MongoDB中有一个文档: { "_id" : ObjectId("111111111111111111111111"), "taskName" : "scan", "nMapRun" : { ... "hosts" : { ... "distance" : {

我在MongoDB中有一个文档:

{
        "_id" : ObjectId("111111111111111111111111"),
        "taskName" : "scan",
        "nMapRun" : {
                ...
                "hosts" : {
                        ...
                        "distance" : {
                                "value" : "1"
                        },..
}
我对以下字段感兴趣:nMapRun.hosts.distance.value 如何获得十个最大值​​这场比赛的最后一场。
您能举一个Java的例子吗?

shell中的聚合操作:

db.collection.aggregate([
{$sort:{"nMapRun.hosts.distance.value":-1}},
{$limit:10},
{$group:{"_id":null,"values":{$push:"$nMapRun.hosts.distance.value"}}},
{$project:{"_id":0,"values":1}}
])
您需要为每个阶段构建相应的
DBObjects
,如下所示:

    DBObject sort = new BasicDBObject("$sort", 
                    new BasicDBObject("nMapRun.hosts.distance.value", -1));
    DBObject limit = new BasicDBObject("$limit", 10);
    DBObject groupFields = new BasicDBObject( "_id", null);
    groupFields.put("values", 
                    new BasicDBObject( "$push","$nMapRun.hosts.distance.value"));
    DBObject group = new BasicDBObject("$group", groupFields);
    DBObject fields = new BasicDBObject("values", 1);
    fields.put("_id", 0);
    DBObject project = new BasicDBObject("$project", fields );
管道运行:

    List<DBObject> pipeline = Arrays.asList(sort, limit, group, project);
    AggregationOutput output = coll.aggregate(pipeline);
    output.results().forEach(i -> System.out.println(i));
List pipeline=Arrays.asList(排序、限制、组、项目);
AggregationOutput输出=集合聚合(管道);
output.results().forEach(i->System.out.println(i));