Ответы пользователя по тегу MongoDB
  • Как реализовать нормальные отношения между доками в mgo golang??

    mirrr
    @mirrr
    Программист и просто хороший человек
    В агрегациях монги, начиная с 3.2 есть аналог LEFT JOIN - $lookup. В mgo агрегации реализуются через Pipe. Маленький пример на коленке, в поле news при выборке попадают все новости автора:

    package main
    
    import (
    	"encoding/json"
    	"fmt"
    	"gopkg.in/mgo.v2"
    )
    
    type (
    	obj map[string]interface{}
    	arr []interface{}
    )
    
    func main() {
    	mongo, err := mgo.Dial("localhost")
    	if err != nil {
    		panic(err)
    	}
    
    	info := []obj{}
    
    	if err := mongo.DB("myDB").C("authors").Pipe(arr{
    		obj{"$match": obj{"banned": false}},
    		obj{"$lookup": obj{"from": "news", "localField": "_id", "foreignField": "authorID", "as": "news"}},
    	}).All(&info); err != nil {
    		fmt.Println("Error:", err)
    	}
    
    	printJSON(info)
    }
    
    func printJSON(t interface{}) {
    	j, _ := json.MarshalIndent(t, "", "\t")
    	fmt.Println(string(j))
    }
    Ответ написан
    Комментировать
  • Почему mogolab не сохраняет объекты (golang, драйвер "gopkg.in/mgo.v2", )?

    mirrr
    @mirrr
    Программист и просто хороший человек
    package main
    
    import (
    	"fmt"
    	"gopkg.in/mgo.v2"
    )
    
    type (
    	person struct {
    		Name  string
    		Phone string
    	}
    )
    
    func main() {
    	session, err := mgo.Dial("localhost")
    	if err != nil {
    		panic(err)
    	}
    
    	session.SetMode(mgo.Monotonic, true)
    	col := session.DB("database").C("collection")
    
    	count, _ := col.Count()
    	fmt.Println(fmt.Sprintf("Messages count: %d", count))
    
    	err = col.Insert(&person{Name: "TestName", Phone: "+365756765"})
    }


    Результат:

    > use database
    switched to db database
    > db.collection.find()
    { "_id" : ObjectId("56bf67529ac5b6a0afcbe7b4"), "name" : "TestName", "phone" : "+365756765" }
    { "_id" : ObjectId("56bf67569ac5b6a0afcbe7b5"), "name" : "TestName", "phone" : "+365756765" }
    { "_id" : ObjectId("56bf67589ac5b6a0afcbe7b6"), "name" : "TestName", "phone" : "+365756765" }
    { "_id" : ObjectId("56bf675a9ac5b6a0afcbe7b7"), "name" : "TestName", "phone" : "+365756765" }


    В моем коде все работает. Что у вас не так, сложно понять, так-как код приведен не полностью. Но могу предположить, что в структуре Person названия полей не с заглавных букв начинаются и потому поля приватны.
    Ответ написан
  • Когда лучше хранить изображения в файловой системе а когда в БД?

    mirrr
    @mirrr
    Программист и просто хороший человек
    Немного припозднился с ответом. Но все же.
    Лучше организовать приложение на ноде так, чтобы можно было перебросить большую часть работы хоть на тот же nginx. На машине девелопера пусть себе файлы отправляет нода. На продакшине отдачу статики лучше возложить на nginx. В идеале - шаблоны сайтов тоже пусть он шлет, а взаимодействие nodejs-клиент пусть происходит в формате легких json запросов, которые уже на клиенте оборачиваются в шаблоны с помощью doT.js или swig.
    Если же файлы будут лежать в БД, то выковырять их оттуда чем-либо, кроме вашего приложения будет проблематично.
    Ответ написан
    Комментировать