在命令提示符中,我输入以下内容:
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".
是否有可能做我刚才做的事情?
答案 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");