对/从现场插入/检索

时间:2016-03-23 21:16:15

标签: java json mongodb arraylist hashmap

我正在尝试在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]

我的问题是:

如何分别收到数字3和数字5?我应该用另一种方式插入文件吗?我使用的是mongo java驱动程序3.2.0。

1 个答案:

答案 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"
        }
    ]
}