grails-mongodb:findAllBy * InList未按顺序返回结果

时间:2015-07-07 06:55:00

标签: mongodb grails gorm grails-2.4

我正在使用grails2.4.4和mongodb插件版本3.0.3。我在获取域对象的结果时遇到问题。我正在使用以下代码:

我的域名:

Employee{
   ObjectId id
   String name
}

我有id列表,使用下面的代码来获取员工:(请注意,下面的数据仅用于表示我的问题。实时,我的ID是随机的,所以我不能使用排序,但我只是想要按输入顺序排列。)

def idsList=[new ObjectId("2001"), new ObjectId("2002"), new ObjectId("2003")]
def results=Employee.findAllByIdInList(idsList)

预期结果:

[Employee@2001,Employee@2002,Employee@2003]

实际结果(不按顺序):

[Employee@2002, Employee@2003 , Employee@2001] or sometimes
[Employee@2003, Employee@2001 , Employee@2002]

现在我这样做是为了得到所需顺序的输出:

def results=[]
for(id in idsList){
   def emp=Employee.findById(id)
results<<emp
}

但是我希望通过单次调用(findAllBy * InList)来执行此操作,而无需迭代对象。任何人都可以建议我如何按输入ID的顺序得到结果?

1 个答案:

答案 0 :(得分:0)

你试过吗

Employee.findAllByIdInList(idsList, [sort: 'id', order:'asc'])

?它应该按预期工作

如果没有,则可以使用

而不是for循环
def result = idList.collect { id -> Employee.findById(id) }