未找到MongoDB排序方法

时间:2013-12-31 16:02:25

标签: java mongodb sorting coldfusion coldfusion-10

我正在评估MongoDb并遇到了一个我无法解决的绊脚石。我使用的是Mongo Java Driver 2.11.3。

当我使用Mongo Shell运行以下代码时。我得到了预期的结果。

db.people.find().sort({Counter: -1}).limit(10)

当我使用以下代码从我的应用程序运行时,出现“未找到排序方法”的错误。

<cfscript>
results = people.find().sort({Counter: -1}).limit(10).toArray();
</cfscript>

如果我运行这个,我没有错误:

<cfscript>
results = people.find().limit(10).toArray();
</cfscript>

如果我运行此操作,我会收到错误 - 找不到排序方法。

<cfscript>
results = people.find().sort({Counter: -1}).toArray();
</cfscript>

因此,在收到此错误后,我查看了驱动程序api文档:http://api.mongodb.org/java/2.11.3/,根据我所看到的情况,DBCursor类包含limit()和{{ 1}}方法但限制方法似乎工作正常。

任何帮助都将不胜感激。

从评论中更新:

当我尝试运行建议的代码时,我得到一个错误,基本上说它无法找到BasicDBObject接口。

Sort()

2 个答案:

答案 0 :(得分:2)

在java驱动程序中,集合中的各种find方法返回一个DBCursor,后者又支持sort方法: 在DBCollection

  

DBCursor find(DBObject ref)

DBCursor

中的

  

DBCursor sort(DBObject orderBy)

所以整个事情看起来像

DBCollection collection = ... // get collection
DBObject query = ... 
DBCursor sortedCursor = collection.find(query).sort(new BasicDBObject("fieldToSortBy",1)); 

答案 1 :(得分:2)

使用Steve的建议,这是我的最终代码,它按预期工作。有一点值得注意的是,我在运行代码时遇到了另一个问题。我得到了这个奇怪的索引错误“尝试使用索引类型'-1',其中不允许索引类型(仅1或-1)。”但我能够解决这个问题。再次感谢!

<cfscript>
function checkJson(x){
    variables.result = "";      
    if(IsJson(x)){
        variables.result = CreateObject("java","com.mongodb.util.JSON").parse(arguments.x);     
    }else{          
        variables.result = CreateObject("java","com.mongodb.util.JSON").parse(SerializeJSON(arguments.x));      
    }           
    return variables.result;
}
</cfscript>

<cfscript>
    myDb = MongoC.getDB('MFMFMF');
    collection = myDb.getCollection("people");
    mySortInstance = createObject("java", "com.mongodb.BasicDBObject").init("Counter", 1);  
    myParseInstance = checkJson(mySortInstance);
    cursor = collection.find().sort(myParseInstance).toArray();
    peopleResult = cursor;
</cfscript>