我在MongoDB中有以下JSON集合。
{
"_id": ObjectId("57529381551673386c9150a6"),
"team_code": 3,
"team_id": 2
},
{
"_id": ObjectId("57529381551673386c91514a"),
"team_code": 4,
"team_id": 5
},
{
"_id": ObjectId("57529381551673386c91514b"),
"team_code": 3,
"team_id": 2
},
{
"_id": ObjectId("57529381551673386c91514c"),
"team_code": 4,
"team_id": 5,
}
从数据中可以看出,每个都有2条记录(team_code=3, team_id =2
)和(team_code =4, team_id=5
)。
是否有可能获得一组独特的团队代码和团队ID。
有点像,
{
"team_code" : 3, "team_id" : 2,
"team_code" : 4, "team_id" : 5,
}
答案 0 :(得分:5)
您可以使用以下聚合管道执行此操作:
var distinctIdCode = { $group: { _id: { team_code: "$team_code", team_id: "$team_id" } } }
db.foo.aggregate([distinctIdCode])
这会给你:
{ "_id" : { "team_code" : 4, "team_id" : 5 } }
{ "_id" : { "team_code" : 3, "team_id" : 2 } }
此查询返回根据集合中的文档创建的新文档。返回的文档具有_id
,这是将收集文档分组到team_code
和team_id
字段的结果。
答案 1 :(得分:0)
对于Java代码:
Bson field1 = new Document("team_code", "$team_code").append("team_id", "$team_id");Bson groupField = new Document("_id", field1 );
Bson group = new Document("$group", groupField );List<Bson> bsonList = new ArrayList<Bson>();
bsonList.add(group);
com.mongodb.client.AggregateIterable<Document> res=collection.aggregate( bsonList );
for (Document doc : res) {
Document subDoc=(Document)doc.get("_id");
System.out.println(subDoc.get("team_code")+" : "+subDoc.get("team_id"));
//deptEnvs.put(subDoc.getInteger("dept"), subDoc.getString("smEnv"));
}