Mgo конвертировать mapreduce в агрегации команды

Самое простое решение - посмотреть на трассировку стека и полностью удалить каждую явную ссылку на свойство.

public String Name
{
    get { return this.name; }
    set
    {
        if (value != this.name)
        {
            this.RaisePropertyChanging();
            this.name = value;
            this.RaisePropertyChanged();
        }
    }
}
private String name = null;

private void RaisePropertyChanged()
{
    String propertyName =
       new StackTrace().GetFrame(1).GetMethod().Name.SubString(4);

    PropertyChangedEventHandler handler = this.PropertyChanged;
    if (handler != null)
    {
        handler(new PropertyChangedEventArgs(propertyName));
    }
}

Код выводит имя свойства через трассировку стека из метода календаря - это метод установки свойств с именем set_<PropertyName>. Если компилятор больше не следует этому соглашению об именах, код прерывается.

Другим решением является получение имени свойства из лямбда-выражения.

public static String GetPropertyNameFromLambdaExpression<TObject, TProperty>(
    Expression<Func<TObject, TProperty>> expression)
{
    return ((MemberExpression)expression.Body).Member.Name;
}

Например

GetPropertyNameFromLambdaExpression<String, Int32>(s => s.Length)

вернет «Length», как ожидалось. Производственная версия кода действительно требует дополнительных проверок и лучшей интеграции в остальную часть кода. Например, можно использовать вывод типа для общих аргументов.

UPDATE

И есть третье решение - вы можете использовать MethodBase.GetCurrentMethod() внутри свойства getter или setter для получения имя метода setter или getter.

public String Name
{
    get { return this.name; }
    set
    {
        if (value != this.name)
        {
            String propertyName = MethodBase.GetCurentMethod().Name.SubString(4);

            this.RaisePropertyChanging(propertyName);
            this.name = value;
            this.RaisePropertyChanged(propertyName);
        }
    }
}
private String name = null;
1
задан icza 2 March 2019 в 17:48
поделиться

1 ответ

Ваша структура запроса mgo в порядке, проблема в названии поля count. Модель ожидает Value:

var result []struct {
    Status string `bson:"_id"`
    Value  int
}

Так что измените стадию $group на следующую:

grp := bson.M{
        "$group": bson.M{
                "_id": "$status",
                "value": bson.M{   // Note lowercased "value"!
                        "$sum": 1,
                },
        },
}

И это должно сработать. Или измените модель, если вы можете:

var result []struct {
    Status string `bson:"_id"`
    Value  int    `bson:"count"`
}

Только один из них должен быть изменен, чтобы быть согласованным с другим.

И последнее: если вы используете Query.One(), то result не должен быть срезом (One() ожидает только один документ).

Используйте тип среза для result, если вы используете, например, Query.All().

Поэтому, если вы собираетесь использовать Query.One(), используйте результат:

var result struct {
    Status string `bson:"_id"`
    Value  int    `bson:"count"`
}

Также Query.One() и Query.All() возвращают ошибку, проверьте ее!

0
ответ дан icza 2 March 2019 в 17:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: