我正在通过教程学习 Spring Data MongoDB (https://spring.io/guides/tutorials/data/2/ https://spring.io/guides/tutorials/data/2/)。
在本教程中,成本类型为 BigDecimal,如下所示,并以“字符串”形式存储在 MongoDB 中。
因此,当我尝试按成本字段进行升序排序时,我得到了错误的结果。
我发现使用 BigDecimal 类是计算的最佳方法。
但是,如果我使用 MongoDB 中的 Spring Data MongoDB 将数字保存为 BigDecimal 类型,
它将被保存为字符串类型
我会得到一个错误的排序结果,就像本教程一样。
为了精确起见,我该怎么做才能获得正确的数字排序结果?
你能帮我解决这个问题吗?
预先非常感谢您。
例如,
1> 菜单项类
@Document(collection = "menu")
public class MenuItem {
@Id
private String id;
@Field("itemName")
@Indexed
private String name;
private BigDecimal cost;
2> 创建MenuItem的实例
MenuItem item = new MenuItem();
item.setDescription("Peanutty Noodles, perfect for every occasion.");
item.setName("Yummy Noodles");
item.setCost(new BigDecimal("52.99"));
MenuItem item = new MenuItem();
item.setDescription("Rice, Egg Fried");
item.setName("Yummy Rice");
item.setCost(new BigDecimal("211.99"));
3>排序结果
db.menu.find().sort({cost:1})
{ "_id" : ObjectId("53e982f0300475a4fbab8c32"), "_class" : "com.yummynoodlebar.persistence.domain.MenuItem", "itemName" : "美味米饭", "description" : "米饭,鸡蛋炒", "配料" : [ { "name" : "鸡蛋", "description" : "鸡蛋" }, { "name" : "米饭", "description" : "白米饭" } ], "cost" : "211.99" , "准备时间": 0 }
{ "_id" : ObjectId("53e982f0300475a4fbab8c33"), "_class" : "com.yummynoodlebar.persistence.domain.MenuItem", "itemName" : "美味米饭", "description" : "米饭,鸡蛋炒", "配料" : [ { "name" : "鸡蛋", "description" : "鸡蛋" }, { "name" : "米饭", "description" : "白米饭" } ], "cost" : "211.99" , "准备时间": 0 }
{ "_id" : ObjectId("53e982f0300475a4fbab8c2f"), "_class" : "com.yummynoodlebar.persistence.domain.MenuItem", "itemName" : "美味面条", "description" : "花生面条,适合各种场合。 ", "配料" : [ { "名称" : "花生", "描述" : "一颗坚果" }, { "名称" : "鸡蛋", "描述" : "用于面条" }, { "名称" : "面条", "描述" : "酥脆可爱的面条" } ], "成本" : "52.99", "分钟准备" : 0 }
{ "_id" : ObjectId("53e982f0300475a4fbab8c30"), "_class" : "com.yummynoodlebar.persistence.domain.MenuItem", "itemName" : "美味面条", "description" : "花生面条,适合各种场合。 ", "配料" : [ { "名称" : "花生", "描述" : "一颗坚果" }, { "名称" : "鸡蛋", "描述" : "用于面条" }, { "名称" : "面条", "描述" : "酥脆可爱的面条" } ], "成本" : "52.99", "分钟准备" : 0 }
{ "_id" : ObjectId("53e982f0300475a4fbab8c31"), "_class" : "com.yummynoodlebar.persistence.domain.MenuItem", "itemName" : "美味面条", "description" : "花生面条,适合各种场合。 ", "配料" : [ { "名称" : "鸡蛋", "描述" : "用于面条" }, { "名称" : "花生", "描述" : "坚果" }, { "名称" : "面条", "描述" : "酥脆可爱的面条" } ], "成本" : "52.99", "分钟准备" : 0 }