Группировка по нескольким значениям при использовании динамического linq и fluent mongo приводит к искаженному выражению map-lower emit - PullRequest
1 голос
/ 09 марта 2012

Я использую динамическую ссылку для выполнения запросов mapreduce, и у меня возникает проблема при попытке сгруппировать по нескольким значениям. Проверьте это:

Это прекрасно работает:

var query = contentDeliveryAggregates.AsQueryable (). Где ("_ id.CId == 1 && _id.CdaId == 1 && _id.From> = @ 0 && _id.To <= @ 1", reportRequest.FromDate, reportRequest.ToDate). GroupBy ("_ id.CdaId", "it"). Выберите («новый (ключ, сумма (значение. ЧБ) как пропускная способность)»); </p>

Это не:

var query = contentDeliveryAggregates.AsQueryable (). Где ("_ id.CId == 1 && _id.CdaId == 1 && _id.From> = @ 0 && _id.To <= @ 1", reportRequest.FromDate, reportRequest.ToDate). GroupBy ("new (_id.CdaId, _id.CId)", "it"). Выберите («новый (ключ, сумма (значение. ЧБ) как пропускная способность)»); </p>

Линк действителен (он прекрасно компилируется), но я получаю ошибку во время выполнения, потому что оператор mapreduce искажен. Вот оператор map-Reduce из второго запроса:

{"mapreduce": "Aggregates", "map": {"$ code": "function () {emit ({} this._id.CdaIdthis. id.CId, {\" $ f0 \ ": this.value.BW});}"}, "redu": {"$ code": "function (key, values) {var $ f0 = 0; values.forEach (function ( doc) { $ f0 + = doc. $ f0;}); return {\ " $ f0 \": _ $ f0};} "}," query ": {" _id. CId ": 1," _id.CdaId ": 1," _id.From ": {" $ gte ": ISODate (" 2012-02-01T08: 00: 00Z ")}," id.To ": {"$ lte": ISODate ("2012-02-11T08: 00: 00Z")}}, "finalize": {"$ code": "function (key, value) {return {\" $ f0 \ ": value ._ $ f0};}"}, "limit": 0, "out": {"inline": 1}}

Проверьте это утверждение emit; это испортилось ...

Я что-то не так делаю или это ошибка в свободном драйвере?

1 Ответ

0 голосов
/ 24 октября 2012

Из учебника mongodb linq http://www.mongodb.org/display/DOCS/CSharp+Driver+LINQ+Tutorial

"Поддерживаются только запросы LINQ, которые можно преобразовать в эквивалентный запрос MongoDB. Если вы напишите запрос LINQ, который не может быть переведен, вы получите время выполненияисключение и сообщение об ошибке укажет, какая часть запроса не была поддержана. "

К сожалению, группа по не находится в списке поддерживаемых, надеюсь, кто-то добавит его в ближайшее время

...