web-dev-qa-db-fra.com

Golang MongoDb Driver Tri

Comment interroger le pilote de Golang MongoDB?

J'essaie ceci:

db.Collection("products").Find(nil, bson.M{}, &options.FindOptions{Sort: "-price"})

Mais j'ai eu cette erreur:

impossible de transformer la chaîne de type en un document BSON: Writetring ne peut écrire que lors de la position positionnée sur un élément ou une valeur mais est positionnée sur une couche de toplevel

Je ne sais pas quoi passer pour trier la variable Becuase c'est une interface {}.

8
Apin

essayez le code ci-dessous

findOptions := options.Find()
// Sort by `price` field descending
findOptions.SetSort(bson.D{{"price", -1}})


db.Collection("products").Find(nil, bson.D{}, findOptions)
4
dassum

Quelques notes que j'ai rencontrées en essayant de résoudre un problème connexe:

  • Si vous essayez de trier par plusieurs champs, assurez-vous d'utiliser BSON.D plutôt que BSON.M, car BSON.M ne conserve pas la commande.

  • Si vous essayez de construire programmable plusieurs champs de tri, essayez
    [.____] Ajout de BSON.E à un bson.d

  • Comme Dassum le faisait, passez bson.m {} pour un filtre vide comme recommandé par
    [.____] la Documentation MONGO

Appliqué:

sort := bson.D{}
for _, example := examples {
    sort = append(sort, bson.E{example, 1})
}

findOptions.SetSort(sort)
db.Collection("products").Find(nil, bson.D{}, findOptions)
0
Matt

Je ne pouvais pas passer bson.D aux options (cela a causé une erreur). Mais ce code a fonctionné pour moi:

    queryOptions := options.FindOneOptions{}
    
    queryOptions.SetSort(bson.M{"priority": -1, "last_error_time": 1})

    sResult := collection.FindOne(context.TODO(), queryFilter, &queryOptions)
0
Amin Shojaei