Ответы пользователя по тегу Node.js
  • Как отсортировать по полю array object?

    CartmanGui
    @CartmanGui Автор вопроса
    Для этого в топике нужно хранить дату последнего сообщения.

    Дело в том, что нужно для каждого пользователя сортировать топики по сообщению именно для него, а в вашем случаи сортировка будет просто по последнему сообщению не важно для кого.
    Пока пришел к беседующему решению
    schema.statics.getTopicList = function (userId, offset, callback) {
        var Topic = this;
            ,q = [
            {$unwind: "$messages"},
            {$match: {$or: [{"messages.to": userId}, {"messages.from": userId}]}},
            {$sort: {"messages.date_created": -1}},
            {$group: {
                        _id: "$_id",
                        "title":{$first: "$title"},
                        "date_last_message":{$first: "$messages.date_created"},
                        "date_created":{$first: "$date_created"},
                    }
            },
            {$sort: {"date_last_message": -1}},
        ];
        if(offset != undefined) {
            q.push({$skip: (config.get('topic:limit') * offset)});
            q.push({$limit: config.get('topic:limit')});
        }
    
        this.aggregate(q,function(err, topics) {
            if(err) return callback(err);
            callback(null,topics);
        });
    
    };
    Ответ написан
    Комментировать
  • Как в mongoose получить данные из поля массив?

    CartmanGui
    @CartmanGui Автор вопроса
    В общим как оказалось нужно преобразовать было topic в ObjectID
    {$match: {_id: mongoose.mongo.ObjectID(topic)}}
    Ответ написан
    Комментировать
  • Node.js + socket.io и mysql как организовать соединение?

    CartmanGui
    @CartmanGui Автор вопроса
    Тимур Шемсединов, у меня тут вопрос по поводу пула соединений с БД.
    Вот к примеру в основном файле приложения я создаю глобальный пул
    app.js
    global.appChat = {};
    appChat.pool = mysql.createPool(config.get('mysql'));

    Потом в модуле user создаю методы для работы с БД

    user.js
    module.exports.getUserById = function(userId, callback){
        $sql = 'SELECT * users WHERE id = ?';
        appChat.pool.getConnection(function(err, connection) {
            if (err) throw err;
            connection.query($sql, [userId], function(err, rows, fields) {
                if (err) throw err;
                connection.release();
                callback(null, rows.length ? rows[0] : null);
            });
        });
    };
    
    module.exports.getUsers = function(callback){
        $sql = 'SELECT * FROM users';
        appChat.pool.getConnection(function(err, connection) {
            if (err) throw err;
            connection.query($sql,function(err, rows, fields) {
                if (err) throw err;
                connection.release();
                callback(null, rows);
            });
        });
    };


    Теперь когда я буду вызывать где либо методы модуля user то каждый раз будет создаваться новое соединение с БД и как я понял вызов connection.release(); не закрывает соединение (т.к в доках для node-mysql написано что все соединения пула закрываются вызовом pool.end) то они будет постоянно открыты и накапливаться?
    Ответ написан