我正在评估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()
答案 0 :(得分:2)
在java驱动程序中,集合中的各种find方法返回一个DBCursor,后者又支持sort方法: 在DBCollection
DBCursor 中的DBCursor find(DBObject ref)
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>