使用java进行mongodb嵌套值排序

使用java进行mongodb嵌套值排序,java,mongodb,sorting,Java,Mongodb,Sorting,我的mongoDB集合包含以下文档 { "diskUtilization" : [ { "usePercentage" : "12%", "mountedOn" : "Mounted", "available" : "Available", "blocks" : "1K-blocks", "used" : "1238921", "fileSystem" : "Filesystem"

我的mongoDB集合包含以下文档

{
  "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相同的字段(甚至用简单的脚本替换现有的键)?似乎比使用低效查询更有效。当然,如果您的数据变化非常快,这不是一个解决方案-那么您可能应该处理插入。如果你不能,你必须坚持下面给出的答案,并在你的查询应用程序中手工排序。