MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Има ли начин да получите парче като резултат от Find()?

Резултатът от MongoDB find() винаги е списък с документи. Така че, ако искате списък със стойности, трябва да го конвертирате ръчно, както направихте.

Използване на персонализиран тип (извлечен от string )

Също така имайте предвид, че ако създадете свой собствен тип (извлечен от string ), бихте могли да замените логиката му за демаршалиране и да „извлечете“ само username от документа.

Ето как може да изглежда:

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
}

И след това заявка за потребителските имена в срез:

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)

Имайте предвид, че []Username не е същото като []string , така че това може или не може да е достатъчно за вас. Ако имате нужда от потребителско име като стойност на string вместо Username когато обработвате резултата, можете просто да конвертирате Username към string .

Използване на Query.Iter()

Друг начин да избегнете копирането на срез би бил да извикате Query.Iter() , итерирайте резултатите и извлечете и съхранете username ръчно, подобно на горната персонализирана логика за демаршалиране.

Ето как може да изглежда:

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да се справя с произволен хеш, върнат от mongo в go (с помощта на mgo)?

  2. изключване на полета в $lookup агрегиране

  3. Networkx никога не приключва с изчисляването на централната централна среда за 2 mil възли

  4. Преброяване на различни полета на поддокумент и извеждане като именувани ключове

  5. return Model.create(arr).exec() не работи в mongoose