【问题标题】:only fields are allowed in a $sort mongodb$sort mongodb 中只允许使用字段
【发布时间】:2018-03-04 13:09:44
【问题描述】:

我正在尝试获取最近的记录,如下所示,但排序操作抱怨表达式不允许。如何在 MongoDB 中实现这一点?

错误:

NotSupportedException:$sort 中只允许使用字段。 MongoDB.Driver.Linq.Translators.QueryableTranslator.TranslateOrderBy(OrderByExpression 节点)

代码:

public virtual List<Post> PagingNearest(Expression<Func<Post, bool>> predicate, int offset, int limit, GeoCoordinatePortable.GeoCoordinate coord)
{
    return _context.Posts.AsQueryable()
             .Where(predicate)
             .OrderBy(x => x.Location.GeoCoordinate.GetDistanceTo(coord))
             .Skip(offset)
             .Take(limit)
             .ToList();
}

【问题讨论】:

  • 您是否尝试查询包含 GeoJSON 坐标的多个文档,并根据与特定点的距离对其进行排序?

标签: c# mongodb asp.net-core-2.0 mongodb-.net-driver


【解决方案1】:

我解决了这个问题,方法是将它转换为一个列表,然后排序,在我的例子中再次将返回的 IOrderedEnumerable 转换为一个列表。

最后一种情况 .ToList() 当然是可选的,它正好适合我的需要。

在我的情况下,我还使用三元运算符按布尔值排序。

.ToList().OrderBy(e =&gt; e.SomeBoolean ? 0 : 1).ToList();

【讨论】:

  • 注意:如果您这样做,您将在服务器上而不是在数据库中进行排序。如果您正在执行任何形式的 Skip/Take,这将不起作用。
猜你喜欢
  • 1970-01-01
  • 2018-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-04
  • 1970-01-01
相关资源
最近更新 更多