在 MongoDB 2.6.5 上使用 mongo shell 运行查询
问题:.limit() 似乎忽略了 .sort()。
这是常规行为吗?我不认为应该这样做,但我不确定。如果没有,有没有一种方法可以通过排序然后限制而不是限制然后排序来使其工作。
我正在运行以下查询
db.post.find({categories: {$in: ["101"]}, location: {$near: [1.310000, 103.700000], $maxDistance: 0.449964}, dateExpire: {$gte: ISODate("2014-11-27T00:00:00Z")}, defunctInd: null}, {_id: 1, dateCreated: 1}).sort({dateCreated: -1}).limit(5);
这是结果(日期不是按照下面排序列表的顺序)
{ "_id" : ObjectId("5473df733a0da831248b4567"), "dateCreated" : ISODate("2014-11-25T01:46:26.059Z")}
{ "_id" : ObjectId("546ea9f63a0da8725b8b4725"), "dateCreated" : ISODate("2014-11-21T02:56:51.143Z")}
{ "_id" : ObjectId("546da7503a0da856058b4633"), "dateCreated" : ISODate("2014-11-20T08:33:18.504Z")}
{ "_id" : ObjectId("546da6943a0da8725b8b469a"), "dateCreated" : ISODate("2014-11-20T08:30:10.779Z")}
{ "_id" : ObjectId("546da5c53a0da8725b8b4667"), "dateCreated" : ISODate("2014-11-20T08:26:42.299Z")}
当我无限制地运行上述查询时
db.post.find({categories: {$in: ["101"]}, location: {$near: [1.310000, 103.700000], $maxDistance: 0.449964}, dateExpire: {$gte: ISODate("2014-11-27T00:00:00Z")}, defunctInd: null}, {_id: 1, dateCreated: 1}).sort({dateCreated: -1})
这是结果
{ "_id" : ObjectId("5476accd3a0da8681d8b4596"), "dateCreated" : ISODate("2014-11-27T04:47:07.078Z")}
{ "_id" : ObjectId("5476ac783a0da8a91d8b4577"), "dateCreated" : ISODate("2014-11-27T04:45:41.940Z")}
{ "_id" : ObjectId("5476aaba3a0da8681b8b45b7"), "dateCreated" : ISODate("2014-11-27T04:38:15.751Z")}
{ "_id" : ObjectId("5476a9e63a0da8751d8b4567"), "dateCreated" : ISODate("2014-11-27T04:34:42.835Z")}
{ "_id" : ObjectId("5473df733a0da831248b4567"), "dateCreated" : ISODate("2014-11-25T01:46:26.059Z")}
{ "_id" : ObjectId("5472f78f3a0da808608b47b8"), "dateCreated" : ISODate("2014-11-24T09:17:01.723Z")}
{ "_id" : ObjectId("5472cc0c3a0da8725b8b4765"), "dateCreated" : ISODate("2014-11-24T06:11:22.772Z")}
{ "_id" : ObjectId("547278bb3a0da8705b8b47b2"), "dateCreated" : ISODate("2014-11-24T00:15:53.478Z")}
{ "_id" : ObjectId("547012413a0da8705b8b4780"), "dateCreated" : ISODate("2014-11-22T04:34:07.992Z")}
{ "_id" : ObjectId("5470110a3a0da8705b8b477f"), "dateCreated" : ISODate("2014-11-22T04:28:55.778Z")}
{ "_id" : ObjectId("546ea9f63a0da8725b8b4725"), "dateCreated" : ISODate("2014-11-21T02:56:51.143Z")}
{ "_id" : ObjectId("546def203a0da8565b8b464a"), "dateCreated" : ISODate("2014-11-20T13:39:43.413Z")}
{ "_id" : ObjectId("546deb693a0da856058b4649"), "dateCreated" : ISODate("2014-11-20T13:23:50.985Z")}
{ "_id" : ObjectId("546da9cc3a0da856058b4647"), "dateCreated" : ISODate("2014-11-20T08:43:54.626Z")}
{ "_id" : ObjectId("546da8733a0da808608b46ec"), "dateCreated" : ISODate("2014-11-20T08:38:09.092Z")}
谢谢
最佳答案
解决了我的问题。
$near 不适用于 $sort。因此,当我放置 $limit 时 $sort 总是被忽略的原因,除非 $limit 足够大以包含所有结果。它会按最近距离的 $near 排序。
解决方案是使用 $geoWithin。 http://docs.mongodb.org/manual/reference/operator/query/geoWithin/#op._S_geoWithin
这适用于 $sort。在我的圆圈例子中,这是替换代码位置:{$geoWithin: {$center: [[1.310000, 103.700000], 0.449964]}
关于MongoDB .limit() 忽略 .sort()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27167654/
我知道我可以指定某些字段来使用pluck查询数据库。ids=Item.where('due_at但是我想知道,是否有一种方法可以指定我想避免从数据库查询的某些字段。某种反拔?posts=Post.where(published:true).do_not_lookup(:enormous_field) 最佳答案 Model#attribute_names应该返回列/属性数组。您可以排除其中一些并传递给pluck或select方法。像这样:posts=Post.where(published:true).select(Post.attr
我想这样组织C源代码:+/||___+ext||||___+native_extension||||___+lib||||||___(Sourcefilesarekeptinhere-maycontainsub-folders)||||___native_extension.c||___native_extension.h||___extconf.rb||___+lib||||___(Rubysourcecode)||___Rakefile我无法使此设置与mkmf一起正常工作。native_extension/lib中的文件(包含在native_extension.c中)将被完全忽略。
在读取/解析文件(使用Ruby)时忽略某些行的最佳方法是什么?我正在尝试仅解析Cucumber.feature文件中的场景,并希望跳过不以Scenario/Given/When/Then/And/But开头的行。下面的代码有效,但它很荒谬,所以我正在寻找一个聪明的解决方案:)File.open(file).each_linedo|line|line.chomp!nextifline.empty?nextifline.include?"#"nextifline.include?"Feature"nextifline.include?"Inorder"nextifline.include?
我正在尝试将以下SQL查询转换为ActiveRecord,它正在融化我的大脑。deletefromtablewhereid有什么想法吗?我想做的是限制表中的行数。所以,我想删除少于最近10个条目的所有内容。编辑:通过结合以下几个答案找到了解决方案。Temperature.where('id这给我留下了最新的10个条目。 最佳答案 从您的SQL来看,您似乎想要从表中删除前10条记录。我相信到目前为止的大多数答案都会如此。这里有两个额外的选择:基于MurifoX的版本:Table.where(:id=>Table.order(:id).
我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时
我已经搜索过这个问题的答案,但没有成功,有一个类似的问题,但答案在这种情况下不起作用,它按数字项目排序。SimilarQuestion-Thatdidnotwork我正在尝试使用ruby的sort_by对一个项目进行降序排序和另一个升序排序。我只能找到一个。代码如下:#PrimarysortLastNameDescending,withtiesbrokenbysortingAreaofinterest.people=people.sort_by{|a|[a.last_name,a.area_interest]}任何指导肯定会有所帮助。示例数据:输入罗素,逻辑欧拉,图论伽罗瓦,抽象代
我正在尝试通过正则表达式拆分参数列表。这是一个带有我的参数列表的字符串:"a=b,c=3,d=[1,3,5,7],e,f=g"我想要的是:["a=b","c=3","d=[1,3,5,7]","e","f=g"]我试过先行,但Ruby不允许使用动态范围后行,所以这行不通:/(?如何让正则表达式忽略方括号中的所有内容? 最佳答案 也许这样的东西对你有用:str.scan(/(?:\[.*?\]|[^,])+/)编辑再三考虑。简单的非贪婪匹配器在某些嵌套括号的情况下会失败。 关于Ruby正则
我正在使用Jekyll构建一个站点,我的代码中有一些看起来像{{}}(液体标签)的东西。我希望它在Jekyll完成生成网站后最终出现在输出html中,但Jekyll将其解释为其他任何标记。有没有办法让Jekyll只忽略这个标签的这个特定实例? 最佳答案 使用{%raw%}标签:{%raw%}{{...}}{%endraw%}此代码段将生成{{...}}。 关于ruby-忽略Jekyll中的特定标签,我们在StackOverflow上找到一个类似的问题: htt
我有一个包含许多换行符和空格的字符串。我需要将它拆分成固定长度的子字符串。例如a="Thisissome\nText\nThisissometext"现在我想把它分成长度为17的字符串。所以现在它应该导致["Thisissome\nText","\nThisissometex","t"]评论:我的字符串可能包含任何字符(空格/单词等) 最佳答案 "Thisissome\nText\nThisissometext".scan(/.{1,17}/m)#=>["Thisissome\nText","\nThisissometex","t"
在我看来,我正在尝试显示一个对象表,这是我的代码:CategoriesCBB's">然而这是抛出一个错误说:can'tconvertCapabilityBuildingBlockintoArray关系是正确的,错误来self尝试在此处减去数组的第一个对象的行:有什么方法可以忽略数组中的第一个对象来遍历数组吗?谢谢 最佳答案 尝试使用Array.drop-http://www.ruby-doc.org/core/classes/Array.html#M000294 关于ruby-on-ra