如何使用Java在Mongodb中获取特定值?

时间:2017-06-08 19:59:47

标签: java mongodb spring-data

在命令提示符中,我输入以下内容:

db.products.insert( { item: "card", qty: 15 } )

我想知道如何从java获取项目值。 我想创建一个名为item的变量,它会知道它的值是“card”。

我目前在java中使用MongoOperations,但我不知道如何只从MongoDB中获取一个值。

POJO的

@Document(collection="products") 
public class ValueServerModel{

    @Id
    private String id;

    String item;

    int qty;


    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getItem() {
        return item;
    }

    public void setItem(String item) {
        this.item = item;
    }

    public int getQty() {
        return qty;
    }

    public void setQty(int qty) {
        this.qty = qty;
    }

    public Product(String item, int qty) {
        //super();
        this.item = item;
        this.qty = qty;
    }

    @Override
    public String toString() {
        return "Product [id=" + id + ", item=" + item + ", qty=" + Integer.toString(qty) + "]";
    }

}

//provided by suwal

远射尝试

@Autowired
MongoOperations mongoOperations;

@PostConstruct
public List<SomeModel> getList() {
List<SomeModel> pmLst = mongoOperations.findAll(ServerModel.class);
//code above works I get a list of values based on mongo db

//attempting to retrieve one value, (stuck)
String value = mongoOperations.find("test", ValueServerModel.class);

使用命令提示符

我可以使用以下命令获取值:

db.products.find({}, {qty:0, _id:0})
//output ("item": "card")

我想实现以下目标:

db.products.find({}, {item})
//output should be "card".

是否有可能做我刚才做的事情?

2 个答案:

答案 0 :(得分:1)

我知道你想获得价值,但你没有根据什么来指定。那是&#34;你的查询条件是什么&#34;。还不确定ServerModel和ValueServerModel类是什么,但是看看这个一般的想法是否对你有帮助。

假设您在集合产品中插入查询后存储了以下结构

{
    "_id" : ObjectId("5939d5a1d0ffa3f0209fd42f"),
    "item" : "card",
    "qty" : 15
}

您需要一个代表该集合的模型

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection="products") //this is what binds this class to your collection
public class Product {

    @Id
    private String id;

    String item;

    int qty;


    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getItem() {
        return item;
    }

    public void setItem(String item) {
        this.item = item;
    }

    public int getQty() {
        return qty;
    }

    public void setQty(int qty) {
        this.qty = qty;
    }

    public Product(String item, int qty) {
        //super();
        this.item = item;
        this.qty = qty;
    }

    @Override
    public String toString() {
        return "Product [id=" + id + ", item=" + item + ", qty=" + Integer.toString(qty) + "]";
    }

}

现在在你的代码中你会有这样的东西,

// findOne returns you single instance of an object of the specified type
    Product product = mongoOperation.findOne(
            new Query(Criteria.where("item").is("card")), Product.class);

    System.out.println(product); //Output => Product [id=5939d5a1d0ffa3f0209fd42f, item=card, qty=15]

    String value = product.getItem();

    System.out.println("value is " + value);//Output => card

让我们说你想通过id获取,所以你会有这样的东西

Product product2 = mongoOperation.findOne(
            new Query(Criteria.where("_id").is("5939d5a1d0ffa3f0209fd42f")), 
Product.class);

    System.out.println(product2);

答案 1 :(得分:0)

您可以使用投影来请求字段。

这样的东西
Query query = new Query();
query.fields().include("item").exclude("_id");
Product product = mongoOperations.findOne(query, Product.class);

这将使用item字段填充产品pojo。

您可以使用本机mongo java驱动程序直接请求字段。

这样的东西
MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
MongoDatabase database = mongoClient.getDatabase(db_name);
MongoCollection<Document> collection = database.getCollection(collection_name);
String value  = collection.find().projection(Projections.include("item")).first().getString("item");