2012-08-22 64 views
3

如创建如何获得的相邻记录的记录

尝试使用下面的语句来获取文章

# Created is the time of the creation of the current article 
# Before a 
prev_post = db.Post.find ({'created': {'$ lt': created}}, sort = [('created', -1)], limit = 1) 
# After a 
next_post = db.Post.find ({'created': {'$ gt': created}}, sort = [('created', 1)], limit = 1) 

结果反过来又是一个创纪录的时间字段后前获得一个职位不连续,有时会跳过几条记录。我不知道为什么,也许我误解了FIND? 请帮忙。

+0

你是什么意思,“中间会跳过几条好记录”? –

+0

您能否包含您的记录示例以及最终被跳过的内容?另外,你有'created'字段的索引吗? – Stennie

+0

对不起,我的意思是有时候会跳过几条中间记录,它并不是完全相邻的记录 – grace

回答

1

这看起来确实很奇怪,但MongoDB并不保证你存储的记录的顺序,除非你正在查询一个数组(在记录保存在插入顺序中)。我相信MongoDB会做什么 - 它会到达与您的查询匹配并返回的第一个文档。底线:如果逻辑需要邻居记录,使用数组。

+0

感谢您的建议,我会尝试 – grace

+2

我想也许你正在混淆[排序和自然顺序](http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order)。排序依据的字段应该被索引并且是查询中的最后一个字段。这确实提供了排序结果。可能的例外是排序匹配相同排序值的结果(例如,如果只有'created'作为排序值,则创建时间相同)..但如果该顺序很重要,则需要使用更合适的排序键。 – Stennie

+0

我确实发现有关时间的问题,有一些记录有相同的创建时间。谢谢 – grace

0

我认为这是你的创建。时间类型有问题,如果记录时间相同,系统不知道选择哪一个。您可以使用_id,试试看。