1
Mongoドライババージョン:2.2.4.26C#Driver-LINQ - Aggragate - Intに含まれています
いくつかの集計を実行する次のクエリがあります。 Where句からContains述語を削除すると、クエリは正常に実行されます。
私はクライアントのメモリにデータを実現する前に、サーバで集約を減らして実行したいと思います。私が遭遇している問題は、Where句にContainsを使用すると、次の例外が発生します。
$ projectまたは$ groupはSum({document} {ForecastQuantity})をサポートしていません。好きではないドライバは(含まれてい
public class Forecast
{
public int MarkdownGroupId { get; set; }
public List<ForecastData> ForecastArray { get; set; }
...
}
public class ForecastData
{
public int MarkdownNumber { get; set; }
public double ForecastQuantity { get; set; }
...
}
public class Flat
{
public int MarkdownGroupId { get; set; }
public int MarkdownNumber { get; set; }
public double SalesQuantity { get; set; }
...
}
public class FlatProjection
{
public int MarkdownGroupId { get; set; }
public int MarkdownNumber { get; set; }
public double SalesQuantity { get; set; }
...
}
int[] groupIds = new int[]{ 1,2,3 };
var forecastProductDay = _mdb.GetCollection<Forecast>(collectionName);
var forecastProductProjections = forecastProductDay
.AsQueryable()
.Where(x => groupIds.Contains(x.MarkdownGroupId))
.SelectMany(x => x.ForecastArray, (x, fa) => new Flat
{
MarkdownGroupId = x.MarkdownGroupId,
MarkdownNumber = fa.MarkdownNumber,
ForecastQuantity = fa.ForecastQuantity,
...
})
.GroupBy(key => new {key.MarkdownGroupId, key.MarkdownNumber})
.Select(g => new FlatProjection
{
MarkdownGroupId = g.Key.MarkdownGroupId,
MarkdownNumber = g.Key.MarkdownNumber,
SalesQuantity = g.Sum(y => y.ForecastQuantity),
...
})
.OrderBy(x => x.MarkdownGroupId)
.ThenBy(x => x.MarkdownNumber)
.ToList();
これはおそらくドライバのエラーです。式を 'Where(x => x.MarkdownGroupId == 1 || x.MarkdownGroupId == 2 || x.MarkdownGroupId == 3)'に変換すると動作しますか? – dasblinkenlight
はい。それは動作します 場所への変換(x => x.MarkdownGroupId == 1 || x.MarkdownGroupId == 2 || x.MarkdownGroupId == 3) –
あなたはリストにいくつのIDを持っていますか?おそらく、この問題を回避するためにORリストを動的に作成することができます。 – dasblinkenlight