我使用Spring连接到mongoDb。在使用Criteria创建查询时,lt / lte的行为方式不同,即它们提供随机输出。
我想找到" x"英里的邮政编码
查询创建/执行代码:
System.out.println("Please Enter your zipCode");
String zipCode = br.readLine();
System.out.println("Enter the distance (miles) to find store");
Integer distance = br.read();
Query query = new Query();
query.addCriteria(Criteria.where("storeDistance").lt(distance).and("storezipCode").is(zipCode));
List<Store>storeList = mongoOperation.find(query, Store.class);
if(storeList.isEmpty()){
System.out.println("Oops...no store found nearby...!!");
}else{
for(int idx=0; idx<storeList.size(); idx++){
System.out.println(storeList.get(idx).storeIdentificationumber+"\t"+storeList.get(idx).storeDistance);
}
}
商店模型类
package com.storeApp.model;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection= "stores")
public class Store {
@Id
public String storeIdentificationumber;
public String storeName;
public String storezipCode;
public String storeCity;
public Integer storeDistance;
public Store(){}
public Store(String id, String name, String city, String zipCode, Integer distance){
this.storeIdentificationumber = id;
this.storeName = name;
this.storezipCode = zipCode;
this.storeCity = city;
this.storeDistance = distance;
}
}
数据库中的条目:
{
"_id" : "store1",
"storeName" : "store One",
"storezipCode" : "123",
"storeCity" : "city",
"storeDistance" : 51
}
{
"_id" : "store03",
"storeName" : "Store Three",
"storezipCode" : "123",
"storeCity" : "city",
"storeDistance" : 54
}
输入:
Welcome to Store Application....!!
Please select choice from menu below
1. Add a Store
2. Find a Store
3. Remove a Store
2
Please Enter your zipCode
123
Enter the distance (miles) to find store
50
预期产出:
Oops...no store found nearby...!!
实际输出:
store1 51
根据标准和数据库,应该没有距离小于50英里的商店,但仍然会返回一条记录。
答案 0 :(得分:1)
问题在于Integer distance = br.read();
假设br是BufferedReader的实例。 read
方法只读取一个字符并给出该字符的整数值。您可以通过打印distance
变量进行验证。
您需要使用readLine
并使用Integer.parseInt
答案 1 :(得分:0)
是的,这有点奇怪,事情是如果你想在你的查询中添加多个选项,你应该继续添加标准,一个标准不能占用多个字段。
在你的情况下,storezipCode正在从Criteria主要字段中删除storeDistance。
试试这个
config.extraAllowedContent = 'a[*]';
所以问题在于你将使用什么样的场景&#39;和#,你需要留意一些例子,但它并没有像我们希望的那样工作。