Maison >développement back-end >Golang >Erreur d'agrégation Golang Mongodb : l'objet de spécification d'étape de pipeline ne doit contenir qu'un seul champ

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

WBOY
WBOYavant
2024-02-02 14:13:21920parcourir

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})

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)
}

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)
}

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer