$ concatArrays поддерживает только массивы, а не объект - PullRequest
1 голос
/ 04 августа 2020

Я пытаюсь закодировать идеально работающий запрос MongoDB в Go, но у меня проблемы с массивами.

Работаю над JSON:

[
...
{
    $project: {
        acl: {
            $reduce: {
                input: "$a.accesses",
                initialValue: [],
                in: {
                    $concatArrays: ["$$value", "$$this"]
                }
            }
        }
    }
}]

Но не работает Go:

pipe := mongo.Pipeline{
    ...
    bson.D{{Key: "$project", Value: bson.M{
        "acl": bson.M{
            "$reduce": bson.M{
                "input":        "$a.accesses",
                "initialValue": bson.M{},
                // None of the below works
                "in": bson.M{"$concatArrays": bson.A{"$$value", "$$this"}},
                // "in": bson.M{"$concatArrays": []interface{}{"$$value", "$$this"}},
                // "in": bson.M{"$concatArrays": [2]string{"$$value", "$$this"}},
                // "in": bson.M{"$concatArrays": []string{"$$value", "$$this"}},
                // "in": bson.M{"$concatArrays": []interface{}{"$$value", "$$this"}},
                // "in": bson.D{{Key: "$concatArrays", Value: []interface{}{"$$value", "$$this"}}},
            },
        },
    }}},
}

Ошибка: $concatArrays only supports arrays, not object

Я новичок в Go, поэтому я совершенно уверен, что мне не хватает концепции массивы где-нибудь.

1 Ответ

1 голос
/ 04 августа 2020

Значение Go, которое вы указываете для initialValue, равно не массив:

"initialValue": bson.M{},

Вместо этого выполните:

"initialValue": []interface{}{},

Или:

"initialValue": bson.A{},
...