当前位置: 首页 > 知识库问答 >
问题:

MongoDB。limit()忽略。排序()?

高建本
2023-03-14

在MongoDB 2.6.5上使用mongo shell运行查询

问题是:。limit()似乎忽略了。排序()。

这是正常的行为吗?我不认为应该这样做,但我不确定。如果没有,有没有办法让它通过排序然后限制而不是限制然后排序来工作。

我正在运行以下查询

db。邮递查找({categories:{$in:[“101”]},位置:{$near:[1.310000,103.700000],$maxDistance:0.449964},dateExpire:{$gte:ISODate(“2014-11-27T00:00:00Z”)},defunctInd:null},{u id:1,dateCreated:1})。排序({dateCreated:-1})。限额(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”)
{(“546da6943a0da8725b8b469a”),“dateCreated”:ISODate(“2014-11-20T08:30:10.779Z”),
{“id”:ObjectId(“546da5c53a0da8725b8b4667”),“dateCreated”:ISODate(“2014-11-20T08:26:42.299Z”)}

当我无限制地运行上述查询时

db.post.find({类别:{$in:["101"]},位置:{$近:[1.310000, 103.700000],$max距离: 0.449964},日期过期:{$gte: ISODate("2014-11-27T00:00:00Z")},已停用Ind: null},{_id: 1, dateCreated: 1}({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(“5476AABA3A0DA86818B45B7”),“dateCreated”:ISODate(“2014-11-27T04:38:15.751Z”)
{(“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.72723A87258B47Z”)}
{“id”:ObjectId”:ObjectId:“5472CC0CD808B4765”),“Created”:date(“2014-11-24T06:11:22.772Z”)
{id:ObjectId(“547278BB3A0DA8705B47B2”),“dateCreated”:ISODate(“2014-11-24T00:15:53.478Z”)}
{id:ObjectId(“547012413a0da8705b8b4780”),“dateCreated”:ISODate(“2014-11-22T04:34:07.992Z”)}
{id:ObjectId:ObjectId:“5470110A0DA8705B477F”),“dateCreated”:ISODate:2014-11:7728{“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”:isodated(“2014-11-20T13:23:50.415z”)
{(“546da9cc3a0da856058b4647”),“dateCreated”:ISODate(“2014-11-20T08:43:54.626Z”),
{“id”:ObjectId(“546da8733a0da808608b46ec”),“dateCreated”:ISODate(“2014-11-20T08:38:09.092Z”)}

谢谢

共有1个答案

姬乐
2023-03-14

解决了我的问题。

$近不工作与$排序。因此,当我放置$限制时,除非$限制大到足以包含所有结果,否则$排序总是被忽略的原因。它将按最近的距离排序。

解决方法是使用$GeoIn.http://docs.mongodb.org/manual/reference/operator/query/geoWithin/#op._S_geoWithin

这适用于$sort。以我的圆为例,这是替换代码位置:{$geointen:{$center:[[1.310000103.700000],0.449964]}

 类似资料:
  • 问题内容: 我需要从第二个表中选择一些行,并将它们连接成逗号分隔的字符串。除一个问题外,查询效果很好-它始终选择所有行,并忽略LIMIT。 这是我的查询的一部分,该查询获取该字符串并忽略LIMIT: 完整查询: 问题答案: LIMIT子句限制最终结果集中的行数,而不是用于在GROUP_CONCAT中构造字符串的行数。由于您的查询在最终结果中仅返回一行,因此LIMIT无效。 您可以通过使用LIMIT

  • 我构建了一个REST服务,发现使用Gson从ObjectId生成的JSON字符串的格式与Spring-Boot生成的格式不同。如果我以GSON格式将现有文档的_id字段的ObjectId发送到REST服务,并使用MongoRepository的save函数将其保存到集合中,即使在这样的字段上设置了唯一的索引,仍会插入具有duplicated_id的新文档。但是,如果我以spring-boot生成的

  • 问题内容: 给定一个文件: 致电时,我获得: 换句话说,这不是正确的排序,它会删除/忽略空格!我希望这是它的行为,但是无论是否带有标志,它都会发生。 我想获得“正确”的排序: 我应该怎么做? 问题答案: 解决者: 从文档中: 警告:环境指定的语言环境会影响排序顺序。设置LC_ALL = C可获得使用本机字节值的传统排序顺序。 (至少适用于ASCII,不适用于UTF8)

  • 我正在尝试将一个项目从gwt-2.6.1迁移到gwt-2.7。但是,我遇到了一个问题。在一个继承的模块中,由于某种原因,gwt编译器忽略了gwt.xml。所以我有这样的东西。gwt.xml: 但是在使用带有gwt-maven-plugin的maven编译时,我一直收到这样的错误: 如您所见,gwt尝试在servlet目录中编译一个文件,该文件在中被排除。gwt。xml。原因可能是什么?gwt-2.

  • 问题内容: 我正在开发一个使用Spring-boot,关系数据库和Elasticsearch的应用程序。 我在代码的2个不同位置使用JSON序列化: 在REST API的响应中。 当代码与Elasticsearch交互时。 我在Elasticsearch中需要一些属性,但我想向应用程序用户隐藏(例如,来自关系数据库的内部ID)。 这是一个实体的例子: 问题 :当对象持久化在Elasticsearc

  • Spring Boot 2.0.1.RELEASE项目包含Spring Data JPA和Spring Data REST。似乎忽略了RESTendpoint中的<code>sort</code>参数(但在单元测试中使用相同的存储库方法)。存储库如下: } 实体(已编辑)如下: 当我尝试使用导出的RESTendpoint调用它时,例如: http://localhost:8080/api/v1/o