I don't want to use structs before converting results into JSON. Let's say I have some results:
result, err := collection.Find(ctx, filter, options)
I can collect all results in docs variable and last result in doc variable:
var doc bson.Raw
var docs []bson.Raw
for result.Next(ctx) {
document, err := result.DecodeBytes()
if err != nil {
log.Println(err)
}
doc = document
docs = append(docs, doc)
}
I can easily convert last result into JSON without using any structs:
var jsonDoc bson.M
err = bson.Unmarshal(doc, &jsonDoc)
return jsonDoc
I can't convert docs into JSON and use as a result in my Rest server.
Update 2019-01-17:
I'm using result in my REST server like this:
user.GET("/booking/customer/:id", func(c *gin.Context) {
result := GetAllCustomerBookings(c.Param("id"))
c.JSON(http.StatusOK, result)
})
so it can't be a loop through values. The question: how to convert []bson.Raw to []byte or bson.Raw. Let's imagine that now I have {JSON} in each value of array. I need one JSON like this: [{JSON}, {JSON}, ...].
Using nodejs was easier because I could send all records in one JSON document. Go and mongodb-go-driver needs to go through all records and I don't know how to build one JSON document.
Nodejs and mongodb equivalent:
router.get('/bookings/customer/:id', function (req, res, next) {
db.Bookings.find({
"booking.customer._id": {
$eq: req.params.id
}
}).sort({
"booking.arrival_date": -1
},
function (err, bookings) {
if (err) {
res.send(err);
} else {
res.json(bookings);
}
});
});