Maison >développement back-end >Golang >Comment interroger des plages de dates MongoDB à l'aide de Go et Mgo ?

Comment interroger des plages de dates MongoDB à l'aide de Go et Mgo ?

DDD
DDDoriginal
2024-11-08 14:06:02632parcourir

How to Query MongoDB Date Ranges Using Go and Mgo?

Interrogation des plages de dates MongoDB à l'aide de Go et Mgo

Lorsque vous travaillez avec des collections MongoDB qui stockent des dates, il est essentiel de comprendre comment interroger les données dans plages de dates spécifiées. Cet article résout un problème de requête rencontré lors de l'utilisation de Golang et Mgo.

L'exemple de collection MongoDB nommé "my_sales" contient des documents avec des champs comprenant "product_name", "price" et "sale_date", représentés par des ISODates. L'objectif est de récupérer les enregistrements de ventes qui se situent dans une plage de dates spécifique.

Dans le shell MongoDB, la requête ressemble à ceci :

db.my_sales.find({ sale_date: { $gt: ISODate("2014-11-04"), $lt: new ISODate("2014-11-05") });

Cependant, lorsque vous tentez d'effectuer la même requête dans Golang en utilisant le pilote Mgo, le code suivant ne renvoie aucun résultat :

var sales_his []Sale
err := c.Find(bson.M{"sale_date": bson.M{ "$gt": "ISODate("+date_from+")", "$lt": "ISODate("+date_to+")" }    }).All(&sales_his)

Le problème réside dans la façon dont Mgo gère les dates BSON. Pour les structures Go, time.Time doit être utilisé pour les champs de date. Ainsi, la structure Sale doit être définie comme suit :

type Sale struct {
    ProductName string    `bson:"product_name"`
    Price       int       `bson:"price"`
    SaleDate    time.Time `bson:"sale_date"`
}

Avec cette structure mise à jour, la requête correcte dans Golang est :

fromDate := time.Date(2014, time.November, 4, 0, 0, 0, 0, time.UTC)
toDate := time.Date(2014, time.November, 5, 0, 0, 0, 0, time.UTC)

var sales_his []Sale
err = c.Find(
    bson.M{
        "sale_date": bson.M{
            "$gt": fromDate,
            "$lt": toDate,
        },
    }).All(&sales_his)

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:
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