Comment utiliser une tranche donnée pour générer un bson.A? J'en ai besoin pour faire des requêtes dynamiques.
Je passe de mongo-go-driver alpha à beta 0.2.0, et c'est devenu un changement majeur dans mon projet puisque l'API est maintenant différente.
https://godoc.org/github.com/mongodb/mongo -go-driver / bson
input := []string{"bar", "world"}
//expected output
bson.A{"bar", "world"}
3 Réponses :
Donc bson.Un type sous-jacent est [] interface {} ,
Je pourrais simplement utiliser ajouter comme une tranche
Je ne sais pas si vous avez déjà trouvé votre réponse, mais je me suis battu avec ça pendant une heure + hier.
Je ne suis pas sûr que cela résoudra ce que vous demandez. Je suppose que vous essayez de créer un filtre à partir de votre entrée. Finalement, je n'ai pas utilisé de bson.A lorsque j'essayais de passer un tableau.
Situation: Essayer de construire un filtre et l'un des éléments bson.D est un tableau.
Je pensais que je devais utiliser bson.A.
Mon hypothèse initiale:
return bson.D{
{"uuid", request.Uuid},
{"action", request.Action},
{"resource", bson.D{{"$in", resourceStrings}}},
}
où resourceStrings est une tranche de chaînes.
Cependant, cela créera finalement un filtre qui ressemble à
FILTER: [{resource [{$ in [[Orgs :: Organizations :: 1 Orgs :: Organizations :: * Orgs :: Organizations Orgs :: *]]}]}]
* Notez que la méthode $ in recherche ici un tableau de tableaux.
Ce que nous voulons, c'est:
FILTER: [{uuid 80} {action UpdateOrganization} {resource [{$ in [Orgs :: Organizations :: 1 Orgs :: Organizations :: * Orgs :: Organizations Orgs :: *]}]}] code>
Si nous passons dans un tableau littéral de chaînes, cela fonctionnera ...
return bson.D{
{"uuid", request.Uuid},
{"action", request.Action},
{"resource", bson.D{{"$in", bson.A{"Orgs::Organizations::1", "Orgs::Organizations::*", "Orgs::Organizations", "Orgs::*"}}}},
}
Après quelques essais et erreurs, j'ai trouvé que bson.D acceptera directement le tableau.
J'ai finalement résolu le problème ainsi
return bson.D{
{"uuid", request.Uuid},
{"action", request.Action},
{"resource", bson.D{{"$in", bson.A{resourceStrings}}}},
}
Prenant votre exemple à la lettre - si vous essayez simplement de rassembler un tableau pour un bson.A essayez:
bson.A{input}
Voici mon code pour supprimer plusieurs documents basés sur un identifiant qui sont présents dans une autre collection.
Nous recueillons d'abord tous les identifiants d'une collection et les ajoutons à une tranche. Ensuite, nous supprimons les documents d'une autre collection en utilisant DeleteMany()
Je montre le code approprié pour garder le code propre.
var hexIDCollection []primitive.ObjectID
database := db.Conn.Database("mydatabase")
question := database.Collection("questions")
//Iterating to collect IDs from paper
for k, _ := range mystruct.question_hex_ids {
// fetching all IDs and appending to slice
ids := mystruct.question_hex_ids[k]
hexID, err := primitive.ObjectIDFromHex(ids)
if err != nil {
fmt.Println("ObjectIDFromHex ERROR", err)
}
//Populating a slice of all the IDs
hexIDCollection = append(hexIDCollection, hexID)
}
filter := bson.D{
{"_id", bson.D{{"$in", hexIDCollection}}}, }
deleteResult, err1 := question.DeleteMany(ctx, filter)
if err != nil {
fmt.Println("Question Deletion Error", err1)
}
fmt.Println("All questions Deleted: ", deleteResult)