使用文档字段填充组合框

时间:2017-03-01 18:18:07

标签: java mongodb

我正在构建一个连接到MongoDB的关于电影的Java应用程序,我想创建一个ComboBox,这样我就可以使用电影名称来填充它。我的问题是我找到的唯一方法是用完整的文档填充它,而不是仅仅获取电影名称。

这是我到目前为止所做的:

DBCursor films = collection.find();     
while(films.hasNext()){
    comboBox.addItem(films.next());
}

这是我创建文档的方式:

DBCollection table = db.getCollection("films");                  
BasicDBObject document = new BasicDBObject();

document.put("title", titulo.getText());
document.put("arg", argumento.getText());
document.put("date", fecha.getText());
document.put("genres", genres);

table.insert(document);

有没有办法使用find来获取电影标题,然后只显示值?提前谢谢。

修改

在假定的重复问题中,问题与基于其中一个字段查找特定文档有关。这不是我需要的,我需要在一个字段中填充一个组合框,但我需要获取所有文档。

3 个答案:

答案 0 :(得分:2)

如果您只想获得结果集中的特定字段,则需要使用find(DBObject query, DBObject projection)并指定要在下一个投影参数中输入的字段:

// Retrieve only the title of all the documents that can be found in the collection
DBCursor cursor = collection.find(
    new BasicDBObject(), new BasicDBObject("title", Boolean.TRUE)
);
while (cursor.hasNext()) {
    // Add the value of the title to the combo box
    comboBox.addItem((String) cursor.next().get("title"));
}

答案 1 :(得分:1)

而不是在想要返回的键中执行find()传递。在这种情况下,我相信你想要的只是标题。所以这应该有效:

DBCursor films = collection.find({},{"_id":0,"title":1});     
while(films.hasNext()){
    comboBox.addItem(films.next());
}

答案 2 :(得分:1)

DBObjectDBCollection是旧的2.x类。

您可以尝试使用3.x驱动程序。

import static com.mongodb.client.model.Projections.*;

MongoClient mongoClient = new MongoClient();
MongoDatabase db = mongoClient.getDatabase("test");
MongoCollection<Document> col = db.getCollection("films");

List<String> titles = col.find().projection(fields(include("titles"), excludeId())).map(document -> document.getString("titles")).into(new ArrayList<>());