MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Có cách nào để lấy Slice là kết quả của Find () không?

Kết quả của một MongoDB find() luôn luôn là một danh sách các tài liệu. Vì vậy, nếu bạn muốn có một danh sách các giá trị, bạn phải chuyển đổi nó theo cách thủ công giống như cách bạn đã làm.

Sử dụng loại tùy chỉnh (bắt nguồn từ string )

Cũng lưu ý rằng nếu bạn muốn tạo kiểu của riêng mình (bắt nguồn từ string ), bạn có thể ghi đè lôgic giải nén của nó và chỉ "trích xuất" username từ tài liệu.

Đây là cách nó có thể trông như thế này:

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
}

Và sau đó truy vấn tên người dùng thành một phần:

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)

Lưu ý rằng []Username không giống với []string , vì vậy điều này có thể đủ hoặc có thể không đủ đối với bạn. Nếu bạn cần tên người dùng làm giá trị của string thay vì Username khi xử lý kết quả, bạn có thể chỉ cần chuyển đổi Username thành string .

Sử dụng Query.Iter()

Một cách khác để tránh sao chép lát cắt là gọi Query.Iter() , lặp lại các kết quả và trích xuất và lưu trữ username theo cách thủ công, tương tự như cách logic bỏ phân tích tùy chỉnh ở trên hoạt động.

Đây là cách nó có thể trông như thế này:

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. Lấy kết quả có thứ tự về mức độ liên quan từ Truy vấn văn bản trên Bộ sưu tập MongoDB bằng Trình điều khiển C #

  2. Mongorestore có thể lấy một đối số url duy nhất thay vì các đối số riêng biệt không?

  3. làm thế nào để chuyển đổi dấu thời gian thành ngày tháng trong mongodb?

  4. Tìm số lượng tất cả các khoảng chồng chéo

  5. Làm thế nào để sử dụng mongodb $ group trong java?