Вставьте mgo-запрос [] M.bson result в файл file.txt в виде строки - PullRequest
0 голосов
/ 09 мая 2018

Мне нужно вставить в файл результат mgo query MongoDB, преобразованный в Go, чтобы получить the id of images

 var path="/home/Medo/text.txt"

   pipe := cc.Pipe([]bson.M{
              {"$unwind": "$images"}, 
              {"$group": bson.M{"_id": "null", "images":bson.M{"$push": "$images"}}},

              {"$project": bson.M{"_id": 0}}})

    response := []bson.M{}
    errResponse := pipe.All(&response)
    if errResponse != nil {
        fmt.Println("error Response: ",errResponse)
    }
    fmt.Println(response) // to print for making sure that it is working 

    data, err := bson.Marshal(&response)
    s:=string(data)

    if err22 != nil {
        fmt.Println("error insertion ", err22)
    } 

Вот часть, где я должен создать файл и написать на нем.

Проблема в том, что когда я получил результат запроса в текстовом файле, я получил значения перечисления в последнем из каждого значения, например:

id of images 
23456678`0`
24578689`1`
23678654`2`
12890762`3`
76543890`4`
64744848`5`

поэтому для каждого значения я получил отсортированное число в последнем, и я не могу понять, как после получения ответа от запроса я преобразовал Bson в []Byte, а затем в String, но это заставляет меня получать отсортированные по перечислению значения в последнем из каждого результата

Я бы хотел отбросить эти 0 1 2 3 4 5

    var _, errExistFile = os.Stat(path)

    if os.IsNotExist(errExistFile) {
        var file, errCreateFile = os.Create(path)
        if isError(erro) {
            return
        }
        defer file.Close()
    }

    fmt.Println("==> done creating file", path)
    var file, errii = os.OpenFile(path, os.O_RDWR, 0644)
    if isError(errii) {
        return
    }
    defer file.Close()

    // write some text line-by-line to file
    _, erri := file.WriteString(s)
    if isError(erri) {
        return
    }

    erri = file.Sync()
    if isError(erri) {
        return
    }

    fmt.Println("==> done writing to file")

1 Ответ

0 голосов
/ 09 мая 2018

Вы можете объявить простую структуру, например

simple struct {
  ID    idtype `bson:"_id"`
  Image int    `bson:"images"`
}

Функция добавления идентификаторов изображений в файл будет

open file stuff…

result := simple{}
iter := collection.Find(nil).Iter()
for iter.Next(&result){
 file.WriteString(fmt.Sprintf("%d\n",result.Image))
}
iter.Close()
...