java - 查询MongoDB文档中的字段值

标签 java mongodb

我有一个文档嵌入到另一个文档中。我能够获取父文档的值,但不能获取内部文档。 (注释行给出错误)。下面是代码。

DB db = mongoClient.getDB("events");
DBCollection coll = db.getCollection("usercomment");
BasicDBObject searchQuery = new BasicDBObject("source", "twitter").append("data.id_str", "641400902545024");
DBCursor cursor = coll.find(searchQuery);

while(cursor.hasNext()) {
    DBObject currDocument = cursor.next();
    BasicDBObject newDocument = new BasicDBObject("data", currDocument.get("data"));
    //System.out.println(currDocument.get("data.user.location").toString());
    System.out.println(currDocument.get("companyName").toString());
}

下面是 Mongo 中的 json(我在 Debug 中得到的 currDocument 的值):

{
"_id": {
    "$oid": "55eff71de4b0b91376cb5920"
},
"createdDate": {
    "$date": "2015-09-09T00:01:06.000Z"
},
"username": "Bubble",
"userMessage": "Hello from #Iowa.\",
"entities": {
    "symbols": [],
    "urls": [],
    "hashtags": [{
        "text": "Iowa",
        "indices": [23,
        28]
    },
    {
        "text": "WFHM",
        "indices": [48,
        53]
    },
    {
        "text": "twitter",
        "indices": [69,
        77]
    }],
    "media": [{
        "id": 641400900641140736,
        "sizes": {
            "small": {
                "w": 340,
                "h": 255,
                "resize": "fit"
            },
            "thumb": {
                "w": 150,
                "h": 150,
                "resize": "crop"
            },
            "medium": {
                "w": 600,
                "h": 450,
                "resize": "fit"
            },
            "large": {
                "w": 1024,
                "h": 768,
                "resize": "fit"
            }
        },
        "media_url_https": "https://pbs.twimg.com/media/COaAxg_p.jpg",
        "media_url": "http://pbs.twimg.com/media/UsAAxg_p.jpg",
        "expanded_url": "http://twitter.com/Bubble/status/64140024/photo/1",
        "indices": [88,
        110],
        "id_str": "6414009140736",
        "display_url": "pic.twitter.com/ErB8Ed8if",
        "type": "photo",
        "url": "http://t.co/rB8Ed8if"
    }],
    "user_mentions": [{
        "id": 1178011,
        "name": "XXX",
        "indices": [0,
        11],
        "screen_name": "XXX",
        "id_str": "1178011"
    }]
},
"userImage": "http://pbs.twimg.com/profile_images/542698316577/Jvx7sIr_normal.jpeg",
"feedLink": "https://www.twitter.com/statuses/6414009085024",
"feed_id": "64140541185024",
"inReplyTo": "null",
"timestamp": "146866000",
"source": "twitter",
"contactName": "###",
"postCat": "post",
"collection": "usercomment",
"messageId": "1400902541185024",
"companyName": "XXX",
"type": "citation",
"data": {
    "retweeted": false,
    "in_reply_to_screen_name": "XXX",
    "possibly_sensitive": false,
    "lang": "en",
    "in_reply_to_status_id_str": null,
    "id": 6414009025185024,
    "in_reply_to_user_id_str": "1178011",
    "in_reply_to_status_id": null,
    "created_at": "Wed Sep 11 00:01:06 +0000 2015",
    "favorite_count": 1,
    "place": {
        "id": "1c67f9d9ae7f69",
        "bounding_box": {
            "type": "Polygon",
            "coordinates": [[[-93.709504,
            41.49702],
            [-93.503235,
            [-93.503235,
            41.6514656],
            [-93.709504,
            41.6514656]]]
        },
        "place_type": "city",
        "contained_within": [],
        "name": "DesMoines",
        "attributes": {

        },
        "country_code": "US",
        "url": "https://api.twitter.com/1.1/geo/id/1c6ae7f69.json",
        "country": "United States",
        "full_name": "Des Moines, IA"
    },
    "coordinates": null,
    "metadata": {
        "result_type": "recent",
        "iso_language_code": "en"
    },
    "geo": null,
    "is_quote_status": false,
    "source": "<a href=\"http://twitter.com\" rel=\"nofollow\">Twitter Web Client</a>",
    "favorited": false,
    "in_reply_to_user_id": 1178011,
    "retweet_count": 0,
    "id_str": "641400902541185024",
    "user": {
        "location": "Des Moines, Iowa",
        "default_profile": false,
        "profile_background_tile": false,
        "statuses_count": 3721,
        "lang": "en",
        "profile_link_color": "B37700",
        "profile_banner_url": "https://pbs.twimg.com/profile_banners/60056624/14246371",
        "id": 60054624,
        "following": false,
        "protected": false,
        "favourites_count": 200,
        "profile_text_color": "3333",
        "description": "Inventor thinkORANGE(™), eteran",
        "verified": false,
        "contributors_enabled": false,
        "profile_sidebar_border_color": "C0DED",
        "name": "Robert Res, Jr",
        "profile_background_color": "C0DED",
        "created_at": "Tue Jun 05 22:17:22 +0000 2012",
        "is_translation_enabled": false,
        "default_profile_image": false,
        "followers_count": 1615,
        "has_extended_profile": false,
        "profile_image_url_https": "https://pbs.twimg.com/profile_images/54269577/Jvx79sIr_normal.jpeg",
        "geo_enabled": true,
        "profile_background_image_url": "http://abs.twimg.com/images/themes/theme1/b.png",
        "profile_background_image_url_https": "https://abs.twimg.com/images/themes/thee1/bg.png",
        "follow_request_sent": false,
        "entities": {
            "description": {
                "urls": []
            },
            "url": {
                "urls": [{
                    "expanded_url": "http://about.me/bob.jr",
                    "indices": [0,
                    22],
                    "display_url": "about.me/bob.rjr",
                    "url": "http://t.co/rLVnPn"
                }]
            }
        },
        "url": "http://t.co/ryRnPn",
        "utc_offset": null,
        "time_zone": null,
        "notifications": false,
        "profile_use_background_image": true,
        "friends_count": 1770,
        "profile_sidebar_fill_color": "DDF6",
        "screen_name": "BubbleWormBob",
        "id_str": "600546624",
        "profile_image_url": "http://pbs.twimg.com/profile_images/54269837/Jvx79rmal.jpeg",
        "listed_count": 27,
        "is_translator": false,
        "state": "IA"
    }
},
"sentimentUpdated": "Y",
"profileUpdated": "Y",
"feedLoadDate": "20160205924",
"kafkaoffset": "2075805-2",
"sentiment": "Positive",
"posWords": ["great"],
"negWords": [],
"ner": {
    "per": [],
    "org": [],
    "loc": [],
    "oth": ["http:\\/\\/t.co\\/EGrB8E8if"]
},
"kloudid": "534802137717",
"kscore": "54.086",
"kbucket": "50-59",
"kscoredaychange": -0.05502,
"kscoreweekchange": 1.255317743,
"kscoremonthchange": 5.7708270082,
"kinfluencerscount": 5,
"kinfluenceescount": 5,
"ktopics": ",Leadership,Patement,India,",
"rtCount": 0,
"replyCount": 0,
"engCount": 0,
"mediaType": "image",
"mediaURL": "http://pbs.twimg.com/media/COa2g_p.jpg"

这里如何从嵌套的jsons中获取字段值?

最佳答案

您是否尝试过如下所示将每个节点一一拉动。 我想你想得到 "data.user.location"

BasicDBObject newDocument = new BasicDBObject("data", currDocument.get("data"));
System.out.println(((DBObject)newDocument.get("data")).get("location"));

关于java - 查询MongoDB文档中的字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35369871/

相关文章:

java - Akka 如何从 ForkJoinPool 中获益?

java - 在Java中按顺序存储各种对象类型

node.js - 如何使用 Mongoose 更新 mongodb 中的对象?

java - 如何在java中同步异步操作

mongodb - golang mongoDB 唯一索引在多个键时不起作用

java - 在类方法中包含 this 关键字是个好习惯吗?

Java swing-在点击时执行一个 Action

java - Android将webview转换为PDF

mongodb - mgo - bson.ObjectId 与字符串 id

javascript - 通过获取最新文档来减少mongodb的输出