2016-03-23 46 views
0

我试图在mongoDB文档中插入对。这怎么我做它至今:对插入/从字段中检索

private static MongoCollection<Document> getCollectionn(String link, String coll){ 
    ... 
} 

public static void main(String[] args) { 
     MongoCollection<Document> fb_users; 
     fb_users = getCollectionn("mongodb://...", "fb_users2"); 
     Document myDoc; 
     BasicDBObject query = new BasicDBObject(); 
     query.put("fbid", "1"); 
     myDoc = fb_users.find(query).first(); 
     int postId=5; 
     int rating=3;     
     fb_users.updateOne(myDoc, 
      new Document("$push", new Document("ratings", java.util.Arrays.asList(rating, postId)))); 

     Object a = myDoc.get("ratings"); 
     ArrayList<Document> b = (ArrayList<Document>) a; 
     System.out.println(b.get(0);//prints [3, 5] 
} 

这是阵列文档的插入集合中两分后: (文件已经存在)

{ 
    "_id": { 
     "$oid": "56f173b5e4b04eaac6531030" 
    }, 
    "fbid": "1", 
    "ratings": [ 
     [ 
      3, 
      5 
     ], 
     [ 
      3, 
      5 
     ] 
    ] 
} 

在的println我得到的结果[3,5]

我的问题是这样的:

我怎么能接受的numder 3和seperatly 5号?我应该用另一种方式插入文件吗? Iam使用mongo java驱动程序3.2.0。

回答

0

好吧,我找到了解决方案。那就是:

Document myDoc; 
    BasicDBObject query = new BasicDBObject(); 
    query.put("fbid", "1"); 
    myDoc = fb_users.find(query).first(); 
    int postId=5; 
    int rating=3; 
    Document listItem = new Document("ratings", new Document(String.valueOf(rating), String.valueOf(postId))); 
    Document updateQuery = new Document("$push", listItem); 
    fb_users.updateOne(myDoc, updateQuery); 
    MongoCursor<Document> curs = fb_users.find(query).iterator(); 
    ArrayList<Document> list = (ArrayList<Document>) myDoc.get("ratings"); 
    Iterator<Document> iterateList = list .iterator(); 
    while(iterateList .hasNext()){ 
     Document pair = iterateList .next(); 
     for(String element : pair.keySet()){ 
      System.out.println(element + " " + pair.get(element)); 
     } 
    } 

和JSON格式的,应该是这样的:

{ 
    "_id": { 
     "$oid": "56f173b5e4b04eaac6531030" 
    }, 
    "fbid": "1", 
    "ratings": [ 
     { 
      "3": "5" 
     }, 
     { 
      "3": "5" 
     } 
    ] 
}