Maison  >  Article  >  développement back-end  >  Comment récupérer des documents MongoDB à l'aide d'un tableau d'ID d'objet à l'aide de mgo et bson ?

Comment récupérer des documents MongoDB à l'aide d'un tableau d'ID d'objet à l'aide de mgo et bson ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-30 06:35:27709parcourir

How to Retrieve MongoDB Documents by an Array of Object IDs using mgo and bson?

Récupération de documents MongoDB par tableau d'ID d'objet

Dans MongoDB, il est possible de stocker un tableau d'ID d'objet (également appelés _ids) au sein d'un document. Pour récupérer efficacement tous les documents correspondant à ces ID d'objet, utilisez l'opérateur $in.

Question :

Vous disposez d'un tableau d'_ids codés en hexadécimal :

ids := ["543d171c5b2c12420dd016", "543d171c5b2dd016"]

Comment récupérer les documents correspondants en utilisant mgo et bson ?

Réponse :

Votre approche initiale en utilisant :

query := bson.M{"_id": bson.M{"$in": ids}}
c.Find(query).All()

est incorrect car les _ids sont stockés sous forme d'ID d'objet, pas de chaînes. Pour récupérer des documents par ID d'objet, vous devez convertir les chaînes codées en hexadécimal en objets bson.ObjectId :

oids := make([]bson.ObjectId, len(ids))
for i := range ids {
  oids[i] = bson.ObjectIdHex(ids[i])
}

query := bson.M{"_id": bson.M{"$in": oids}}
c.Find(query).All()

Ce code :

  1. Crée une tranche de bson.ObjectId objets.
  2. Parcourt les chaînes _id codées en hexadécimal, en les convertissant chacune en un ID d'objet à l'aide de la fonction bson.ObjectIdHex.
  3. Construit une requête dans laquelle le champ _id correspond à l'un des ID d'objet fournis. .
  4. Utilise les méthodes Find et All pour récupérer tous les documents correspondants de la collection MongoDB.

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