1
votes

Comment utiliser les éléments d'une tranche dans bson.A en utilisant mongo-go-driver 0.2.0

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


0 commentaires

3 Réponses :


2
votes

Donc bson.Un type sous-jacent est [] interface {} ,

Je pourrais simplement utiliser ajouter comme une tranche


0 commentaires

3
votes

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

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}


0 commentaires

0
votes

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.

Json

    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)


0 commentaires