現在、私はfilePrefixに基づいてグループ化し、max fileIdでレコードを取得できます。MongoアグリゲーションのfilePrefixでグループ化するときにfileNameを投影する方法
出力では、filePrefixとfileIdを取得できましたが、fileNameとfileIdを取得できませんでした。
誰もが...これについて
マイドキュメント私を助けてくださいすることができ:
{
"_id" : ObjectId("58cbe224238b3953da3bc0bc"),
"fileName" : "samplefile1_124.txt",
"filePrefix":"samplefile1",
"fileId":124
}
{
"_id" : ObjectId("58cbe257238b3953da3bc0bd"),
"fileName" : "samplefile2_125.txt",
"filePrefix":"samplefile2",
"fileId":125
}
{
"_id" : ObjectId("58cf8d13f731b796bc343726"),
"fileName" : "samplefile3_126.dat",
"filePrefix":"samplefile3",
"fileId":126
}
{
"_id" : ObjectId("58cfa525f731b796bc343727"),
"fileName" : "samplefile1_126.txt",
"filePrefix":"samplefile1",
"fileId":126
}
{
"_id" : ObjectId("58cfa525f731b796bc343728"),
"fileName" : "samplefile2_127.txt",
"filePrefix":"samplefile2",
"fileId":127
}
マイコード:
MongoClient mongo = new MongoClient("localhost",27017);
MongoDatabase db = mongo.getDatabase("fileDB");
MongoCollection<Document> col = db.getCollection("fileStatus");
List<String> docsList = new ArrayList<>();
docsList.add("samplefile1");
docsList.add("samplefile2");
docsList.add("samplefile3");
Set<String> docsSet = new HashSet<>();
for(String st: docsList){
docsSet.add(st);
}
Document match = new Document("$match", new Document("filePrefix",new Document("$in",docsSet)));
Document group = new Document("$group" , new Document("_id","$filePrefix").append("fId", new Document("$max","$fileId")));
Document project = new Document("$project",new Document("filePrefix","$_id").append("fileId", "$fId"));
AggregateIterable<Document> output = col.aggregate(Arrays.asList(match,group,project));
for (Document dbObject : output)
{
System.out.println(dbObject);
}
マイ出力:
ドキュメントを{ {_id = samplefile1、filePrefix = samplefile1、fileId = 126.0 }}
ドキュメント{{_ ID = samplefile2、filePrefix = samplefile2、FILEID = 127.0}}
ドキュメント{{_ ID = samplefile3、filePrefix = samplefile3、FILEID = 126.0}}
使用 '$ first'またはグループステージ内のファイル名で' $のlast'として翻訳
としてサンプル文書を使用して、例えば
。 '.append(" fileName "、新しいドキュメント(" $ first "、" $ fileName ")'のようなもの)orderを制御したい場合は、グループの前にsort stageを使用してください。 – Veeram
最初のfileNameは必要ありません。 maxIdの出力に表示されるfileName – dev777
@Veeramは、2番目のパイプラインステップとして 'fileId'によって' $ sort'を昇順にし、 '$ group'ステップで' $ last'を使用して 'fileName 'とすると、最大ファイルIDに関連付けられたファイル名になります。 – richsilv