MongoDB C# 基于条件列排序

问题描述 投票:0回答:1

我有一个有 2 个日期的实体,假设这个简化的实体:

public sealed class Foo
{
    public DateTime DateA { get; set; }
    public DateTime DateB { get; set; }
}

我需要按照这个规则排序:

Foo
实体的日期是
DateA
DateB

中最远的一个

所以我尝试写一些尊重这条规则的东西:

Builders<Foo>.Sort.Ascending(x => x.DateA > x.DateB ? x.DateA : x.DateB));

但是运行时不支持操作,有办法吗?

c# mongodb mongodb-query
1个回答
0
投票

您无法对表达式进行排序。因此,首先创建一个具有该值的字段 - 使用 DateA 和 DateB 之间较大的日期(又名“最近”或“最新”)。 为此,您可以将 $cond

与 if-then-else 一起使用,但由于您有实际的日期类型字段,因此使用

$max
运算符更简单。
db.collection.aggregate([
  {
    $set: {
      largestDate: { $max: ["$DateA", "$DateB"] }
    }
  },
  { $sort: { largestDate: 1 } },
  // uncomment this step to remove the 'largestDate' field
  // { $unset: "largestDate" }
])
蒙戈游乐场

    

© www.soinside.com 2019 - 2024. All rights reserved.