使用java进行mongodb嵌套值排序
我的mongoDB集合包含以下文档使用java进行mongodb嵌套值排序,java,mongodb,sorting,Java,Mongodb,Sorting,我的mongoDB集合包含以下文档 { "diskUtilization" : [ { "usePercentage" : "12%", "mountedOn" : "Mounted", "available" : "Available", "blocks" : "1K-blocks", "used" : "1238921", "fileSystem" : "Filesystem"
{
"diskUtilization" : [
{
"usePercentage" : "12%",
"mountedOn" : "Mounted",
"available" : "Available",
"blocks" : "1K-blocks",
"used" : "1238921",
"fileSystem" : "Filesystem"
},
{
"usePercentage" : "19%",
"mountedOn" : "/",
"available" : "5617932",
"blocks" : "7223800",
"used" : "1238920",
"fileSystem" : "/dev/sda1"
},
{
"usePercentage" : "1%",
"mountedOn" : "/dev",
"available" : "500436",
"blocks" : "500440",
"used" : "4",
"fileSystem" : "udev"
}
}
现在我想根据使用的键对数据进行排序,所以我的java代码如下
DBCursor cur = coll.find().sort(new BasicDBObject("diskUtilization.used", -1)).limit(100);
但上面的游标结果不显示数据排序顺序,因为给定的键值是字符串格式的。如何将mongo字符串值转换为int,然后使用java代码或其他方法对字符串值进行排序 不幸的是,你必须自己做 从shell中,您可以发布以下内容:
db.collection.find().forEach(function(doc)
{
doc.diskUtilization.map(function(sub) {
sub.usePercentage=parseInt(sub.usePercentage);
})
db.collection.save(doc);
});
请注意,这个简单的JavaScript代码不会检查正确性,例如,diskUtilization数组是否存在。您必须自己添加此类验证。为什么不添加与int相同的字段(甚至用简单的脚本替换现有的键)?似乎比使用低效查询更有效。当然,如果您的数据变化非常快,这不是一个解决方案-那么您可能应该处理插入。如果你不能,你必须坚持下面给出的答案,并在你的查询应用程序中手工排序。