Maison > développement back-end > Golang > le corps du texte

Erreur d'agrégation Golang Mongodb : l'objet de spécification d'étape de pipeline ne doit contenir qu'un seul champ

WBOY
Libérer: 2024-02-02 14:13:21
avant
856 Les gens l'ont consulté

Golang mongodb 聚合错误:管道阶段规范对象必须仅包含一个字段

Contenu de la question

Je souhaite que le décompte soit regroupé par nom au cours du mois dernier. Lorsque j'essaie d'exécuter la requête suivante dans le client Golang Mongo. J'obtiens l'erreur :

error: L'objet de spécification de l'étape du pipeline ne doit contenir qu'un seul champ.

cond := &bson.D{
        bson.E{Key: "$createTime", Value: bson.E{Key: "$gte", Value: time.Now().AddDate(0, -1, 0)}},
    }
    match := bson.D{{Key: "$match", Value: cond}}
    group := bson.D{{Key: "$group", Value: bson.D{
        {Key: "_id", Value: "$name"},
        {Key: "count", Value: bson.D{{Key: "$sum", Value: 1}}},
    }}}
    cursor, err := col.Aggregate(ctx, mongo.Pipeline{match, group})
Copier après la connexion

Je ne sais pas quoi faire ?


Bonne réponse


J'ai pu obtenir les résultats que je souhaitais en effectuant les ajustements suivants :

  • $createTime 更改为 createTime,我假设您的字段名称不以 $ Début
  • bson.E{Key: "$gte", Value: time.Now().AddDate(0, -1, 0)} 更改为 bson.D{{Key: "$gte", Value: time .Now().AddDate(0, -1, 0)}}
cond := &bson.D{
    bson.E{Key: "createTime", Value: bson.D{{Key: "$gte", Value: time.Now().AddDate(0, -1, 0)}}},
}
match := bson.D{{Key: "$match", Value: cond}}
group := bson.D{{Key: "$group", Value: bson.D{
    {Key: "_id", Value: "$name"},
    {Key: "count", Value: bson.D{{Key: "$sum", Value: 1}}},
}}}
cursor, err := col.Aggregate(context.TODO(), mongo.Pipeline{match, group})

if err != nil {
    log.Println("Error: ", err)
}
Copier après la connexion

Quelques conseils pour déboguer ce genre de problème :

  • Toujours vérifier les messages d'erreur renvoyés dans les err variables
  • Vous pouvez activer la journalisation des commandes de base de données brutes via :
uri := options.Client().ApplyURI(appSettings.MongoDbUri)

if appSettings.LogDatabaseCommands {
    cmdMonitor := &event.CommandMonitor{
        Started: func(_ context.Context, evt *event.CommandStartedEvent) {
            log.Print(evt.Command)
        },
    }
    uri.SetMonitor(cmdMonitor)
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal