MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB dans Go avec mgo, les opérateurs avec bson.M / bson.D ont toujours une erreur de syntaxe

bson.M est un type de carte, donc le bson.M{ ... } est un littéral de carte . Si des paires clé-valeur sont écrites sur plusieurs lignes, chacune doit se terminer par une virgule. Pour plus de détails, voir Comment casser une longue ligne de code dans Golang ?

De plus, il n'y a pas de littéral "interface", laissez tomber. Une valeur de interface{} type peut contenir/envelopper n'importe quelle valeur, y compris un bson.M évaluer. Et l'interface{} la création de valeur est automatique, vous n'avez même pas besoin de type conversion .

Syntaxe correcte :

convIter := Session.Copy().DB("").C("convs").Find(bson.M{
    "conversationStatus": bson.M{
        "$ne": "DESTROYED",
    },
}).Iter()

De même, si vous utilisez le bson.D type (qui est une tranche), les lignes ne se terminant pas par le crochet fermant du littéral doivent se terminer par une virgule, par exemple :

d := bson.D{
    {Name: "fieldA", Value: 1},
    {Name: "fieldB", Value: "running"},
}