Maison >développement back-end >Golang >Comment interroger des plages de dates MongoDB à l'aide de Go et 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!