在MongoDB中查找一组不同的字段

时间:2016-06-09 10:07:40

标签: mongodb mongodb-query

我在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,
}

2 个答案:

答案 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_codeteam_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"));  

         }
相关问题