我正在使用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的顺序得到结果?
答案 0 :(得分:0)
你试过吗
Employee.findAllByIdInList(idsList, [sort: 'id', order:'asc'])
?它应该按预期工作
如果没有,则可以使用
而不是for
循环
def result = idList.collect { id -> Employee.findById(id) }