新手问题 Mongoid 怎么用一条查询获取相邻的两条记录呢?

newnewnew · 2013年04月14日 · 最后由 congteng 回复于 2013年04月15日 · 2336 次阅读

我想取得一条记录以及前后两条相邻的记录 3 条记录的 id 并不相邻

比如获取 id 为 100 的照片以及前后两张照片

现在是这样写的 (用三条查询语句😢):

前一条:
photoLeft = Photo.where(:_id.lt => 100).last();
本身:
photo =  Photo.where(:_id => 100)
后一条:
photoRight = Photo.where(:_id.gt => 100).first();

这样做虽然可以但是查询了 3 次数据库

有什么方法可以用一条查询解决呢?🙏

请使用$in

#1 楼 @xds2000 不能假设 id 是连续的吧。预先不大可能获知三个相连的 id 。

in(:_id, [$ID-1, $ID, $ID+1])

@xds2000 @ashchan @ginchenorlee 啊! 关键问题没有说,正如@ashchan 大大所说 id 不连续 (我是查找某相册中的某张 photo 和前后两张 photo,在 Photo collection 中他们的 id 并不相邻),无法知道前条记录和后条记录的 id

我一般在相册的记录加一个字段存所有相片的 id,用来排序,查询什么的

不用 id 查

@fresh_fish 一个 Array 类型的字段么? 因为前后两张照片 id 无法获知,那么是应该用序号进行操作么?

#7 楼 @newnewnew string array 都可以,在你上传或删除或排序时就把所有相片 id 保存到这个字段

如果是序号不连续,你现在方法就挺好。遇到问题后再解决不迟。下一步把资料全取,内存排序

自己维护一个字段用来保存这个顺序

需要 登录 后方可回复, 如果你还没有账号请 注册新账号