sql >> Databasteknik >  >> NoSQL >> MongoDB

Finns det något sätt att få segment som ett resultat av Find()?

Resultatet av en MongoDB find() är alltid en lista över dokument. Så om du vill ha en lista med värden måste du konvertera den manuellt precis som du gjorde.

Med en anpassad typ (härledd från string )

Observera också att om du skulle skapa din egen typ (härledd från string ), kan du åsidosätta dess unmarshaling-logik och "extrahera" bara username från dokumentet.

Så här kan det se ut:

type Username string

func (u *Username) SetBSON(raw bson.Raw) (err error) {
    doc := bson.M{}
    if err = raw.Unmarshal(&doc); err != nil {
        return
    }
    *u = Username(doc["username"].(string))
    return
}

Och sedan fråga användarnamnen till en del:

c := mongodb.DB("mybase").C("mycollection") // Obtain collection

var uns []Username
err = c.Find(nil).Select(bson.M{"username": 1, "_id": 0}).All(&uns)
if err != nil {
    fmt.Println(err)
}
fmt.Println(uns)

Observera att []Username är inte detsamma som []string , så detta kanske eller kanske inte är tillräckligt för dig. Om du behöver ett användarnamn som ett värde på string istället för Username när du bearbetar resultatet kan du helt enkelt konvertera ett Username till string .

Med Query.Iter()

Ett annat sätt att undvika skivkopiering är att anropa Query.Iter() , iterera över resultaten och extrahera och lagra username manuellt, på samma sätt som ovanstående anpassade unmarshaling-logik gör.

Så här kan det se ut:

var uns []string
it := c.Find(nil).Select(bson.M{"username": 1, "_id": 0}).Iter()
defer it.Close()
for doc := (bson.M{}); it.Next(&doc); {
    uns = append(uns, doc["username"].(string))
}
if err := it.Err(); err != nil {
    fmt.Println(err)
}
fmt.Println(uns)



  1. MongoDB-projektets uppdaterade post i en kapslad array i findAndModify-frågan

  2. Vad är Map Only-jobb i Hadoop?

  3. Hur implementerar man oAuth2 tillsammans med JWT-autentisering i fjäderstart?

  4. Vilken databas ska man välja (Cassandra, MongoDB, ?) för lagring och sökning av händelse-/logg-/måttdata?