Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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
Java 在Mongo聚合中使用filePrefix分组时如何投影文件名_Java_Mongodb - Fatal编程技术网

Java 在Mongo聚合中使用filePrefix分组时如何投影文件名

Java 在Mongo聚合中使用filePrefix分组时如何投影文件名,java,mongodb,Java,Mongodb,目前,我能够根据filePrefix进行分组,并获得具有max fileId的记录 在输出中,我能够获得filePrefix和fileId,但无法获得fileName以及filePrefix和fileId 有人能帮我解决这个问题吗 我的文件: { “_id”:ObjectId(“58cbe224238b3953da3bc0bc”), “文件名”:“samplefile1_124.txt”, “文件前缀”:“samplefile1”, “文件ID”:124 } { “_id”:ObjectId(“

目前,我能够根据filePrefix进行分组,并获得具有max fileId的记录

在输出中,我能够获得filePrefix和fileId,但无法获得fileName以及filePrefix和fileId

有人能帮我解决这个问题吗

我的文件:

{
“_id”:ObjectId(“58cbe224238b3953da3bc0bc”),
“文件名”:“samplefile1_124.txt”,
“文件前缀”:“samplefile1”,
“文件ID”:124
}
{
“_id”:ObjectId(“58cbe257238b3953da3bc0bd”),
“文件名”:“samplefile2_125.txt”,
“文件前缀”:“samplefile2”,
“文件ID”:125
}
{
“_id”:ObjectId(“58cf8d13f731b796bc343726”),
“文件名”:“samplefile3_126.dat”,
“文件前缀”:“samplefile3”,
“文件ID”:126
}
{
“_id”:ObjectId(“58cfa525f731b796bc343727”),
“文件名”:“samplefile1_126.txt”,
“文件前缀”:“samplefile1”,
“文件ID”:126
}
{
“_id”:ObjectId(“58cfa525f731b796bc343728”),
“文件名”:“samplefile2_127.txt”,
“文件前缀”:“samplefile2”,
“文件ID”:127
}
我的代码:

MongoClient mongo=新的MongoClient(“localhost”,27017);
MongoDatabase db=mongo.getDatabase(“fileDB”);
MongoCollection col=db.getCollection(“fileStatus”);
List docsList=new ArrayList();
添加文档列表(“示例文件1”);
添加文档列表(“示例文件2”);
添加文档列表(“样本文件3”);
Set docsSet=new HashSet();
用于(字符串st:docsList){
文件集添加(st);
}
文档匹配=新文档(“$match”,新文档(“filePrefix”,新文档(“$in”,docsSet));
文档组=新文档(“$group”,新文档(“\u id”,“$filePrefix”)。追加(“fId”,新文档(“$max”,“$fileId”));
文档项目=新文档($project),新文档(“文件前缀”,“美元id”)。追加(“文件id”,“美元fId”);
AggregateItable输出=col.aggregate(Arrays.asList(匹配、组、项目));
for(文档dbObject:output)
{
System.out.println(dbObject);
}
我的输出:

文档{{{u id=samplefile1,filePrefix=samplefile1,fileId=126.0}
文档{{{u id=samplefile2,filePrefix=samplefile2,fileId=127.0}
文档{{{u id=samplefile3,filePrefix=samplefile3,fileId=126.0}


如果要返回其他字段,则需要使用(如果按降序)或(如果按升序)操作符,因此需要运行以下聚合管道,在应用组操作之前首先对文档进行排序。本质上,这将为您提供max字段以及相应的文档字段

例如,使用示例文档作为输入

db.test.aggregate([
    { "$match": { "filePrefix": { "$in": docsSet }  } },
    { "$sort": { "filePrefix": 1, "fileId": -1 } },
    { 
        "$group": {
            "_id": "$filePrefix",
            "fileId": { "$first": "$fileId"},
            "fileName": { "$first": "$fileName"}
        }
    }
])
i、 e.翻译为

Document match =  new Document(
    "$match", new Document("filePrefix",
        new Document("$in", docsSet)
    )
);
Document sort =  new Document("$sort", 
    new Document("filePrefix", 1).append("fileId", -1)
);
Document group =  new Document("$group" , 
    new Document("_id", "$filePrefix")
        .append("fileId",  new Document("$first", "$fileId")
        .append("fileName",  new Document("$first", "$fileName")
    )
);
Document project = new Document("$project",
    new Document("filePrefix", "$_id")
        .append("fileId", 1)
        .append("fileName", 1)
);

如果要返回其他字段,则需要使用(如果按降序)或(如果按升序)操作符,因此需要运行以下聚合管道,在应用组操作之前首先对文档进行排序。本质上,这将为您提供max字段以及相应的文档字段

例如,使用示例文档作为输入

db.test.aggregate([
    { "$match": { "filePrefix": { "$in": docsSet }  } },
    { "$sort": { "filePrefix": 1, "fileId": -1 } },
    { 
        "$group": {
            "_id": "$filePrefix",
            "fileId": { "$first": "$fileId"},
            "fileName": { "$first": "$fileName"}
        }
    }
])
i、 e.翻译为

Document match =  new Document(
    "$match", new Document("filePrefix",
        new Document("$in", docsSet)
    )
);
Document sort =  new Document("$sort", 
    new Document("filePrefix", 1).append("fileId", -1)
);
Document group =  new Document("$group" , 
    new Document("_id", "$filePrefix")
        .append("fileId",  new Document("$first", "$fileId")
        .append("fileName",  new Document("$first", "$fileName")
    )
);
Document project = new Document("$project",
    new Document("filePrefix", "$_id")
        .append("fileId", 1)
        .append("fileName", 1)
);

在group stage中对文件名使用
$first
$last
。类似于
.append(“fileName”,新文档(“$first”,“$fileName”)
。如果您想控制顺序,请使用组前排序阶段。我不想要第一个文件名。我需要在输出中显示最大文件ID的文件名,正如@Veeram建议的那样,如果您将
$sort
文件ID
升序作为第二个管道步骤,然后在
$group
步骤中使用
$last
,以获得ode>fileName,您将拥有与最大文件ID关联的文件名。在group stage中将文件名与
$first
$last
一起使用。类似于
.append(“文件名”),新文档($first),“$fileName”)
。如果您想控制顺序,请使用组前排序阶段。我不想要第一个文件名。我需要在输出中显示最大文件ID的文件名,正如@Veeram建议的那样,如果您将
$sort
文件ID
升序作为第二个管道步骤,然后在
$group
步骤中使用
$last
,以获得ode>文件名,您将拥有与最大文件ID关联的文件名。非常感谢。它帮助了我。非常感谢。它帮助了我。