【发布时间】:2015-07-07 06:55:00
【问题描述】:
我正在使用 grails2.4.4 和 mongodb 插件版本 3.0.3。我在获取域对象的结果时遇到了问题。我正在使用以下代码:
我的域名:
Employee{
ObjectId id
String name
}
我有 ids 列表,使用下面的代码来获取员工:(请注意,下面的数据只是为了代表我的问题。在实时,我的 ids 是随机的,所以我不能使用排序,但我只想要结果按输入顺序。)
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的顺序获得结果?
【问题讨论】:
-
澄清
$in是应用于*InList方法的参数的运算符。 -
哦.. 这意味着它是底层 mongodb 的问题,而不是 grails 或 mongodb 插件的问题。在这种情况下,我使用的解决方案是我目前保留订单的唯一选择。非常感谢您的链接@BlakesSeven
-
正如我所说。该方法构造一个
$in查询。重复问题中的答案显示了处理此问题的服务器端方法。否则,在返回结果后对结果进行排序。这不是 MongoDB 的“问题”,而是它的工作方式。 -
哦,好的。我不能使用排序,因为在我的实时案例中,ID 是随机的,所以我希望结果按输入顺序排列。我会更新我的问题。
标签: mongodb grails grails-orm grails-2.4