如何从mongoDB中只提取一个值?

时间:2017-09-26 18:47:44

标签: java mongodb

就像我有三个'发送','发送'和'消息'字段,我只想显示消息字段的内容,其中我已经给出了一些条款。 文件{{_ id = 59c7d57c674cd5673c304936,to = 9915103230,from = 9915103229,date = 24/12/2017,message = HELLO WORLD}}

我只想回顾“你好世界”,而不是全文。

就像我想要的那样,String message = ????? --->我需要一些方法,因此String类型的变量获取值Hello World。

投影方法对我不起作用。

我正在使用JDBC MongoDB 3.5驱动程序。

2 个答案:

答案 0 :(得分:1)

使用projection,find()的第二个可选参数。对于上下文,这将为您提供整个文档:

db.yourCollection.find({到:9915103230,从:9915103229});

这只会从结果中提供消息。只需将该字段命名并将其设置为1:

db.yourCollection.find({到:9915103230,从:9915103229},{消息:1};

您可以指定多个要返回的内容:

db.yourCollection.find({to:9915103230,from:9915103229},{message:1,to:1};

答案 1 :(得分:0)

这是一个有效的前卫。编译3.5驱动程序。

        MongoClient mongoClient = new MongoClient();
        MongoDatabase db = mongoClient.getDatabase( "testX" );
        MongoCollection<BsonDocument> coll = db.getCollection("foo", BsonDocument.class);
        coll.drop();

        {
            BsonDocument doc = new BsonDocument();
            doc.put("from", new BsonInt32(23343223));
            doc.put("to", new BsonInt32(23343223));
            doc.put("msg", new BsonString("hello"));
            coll.insertOne(doc);

            doc.remove("_id");
            doc.put("from", new BsonInt32(8889));
            doc.put("to", new BsonInt32(99999));
            doc.put("msg", new BsonString("goodbye"));
            coll.insertOne(doc);
        }

        {
            BsonDocument query = new BsonDocument("from", new BsonInt32(8889));
            BsonDocument proj = new BsonDocument("msg", new BsonInt32(1));
            proj.put("_id",new BsonInt32(0));

            BsonDocument d2 = coll.find(query).projection(proj).first();
            System.out.println(d2);

            String s2 = coll.find(query).projection(proj).first().getString("msg").getValue();
            System.out.println(s2);
        }