簡體   English   中英

從mongodb返回所有模型作為對象還是數組?

[英]Return all models from mongodb as an object or array?

我在mongodb中使用套接字,對於試圖創建新名稱的用戶,我需要檢查數據庫中的所有模型以查看其是否存在。

我做錯了所有事情,基本上我正在嘗試做這樣的事情。

var allUsers = [];

models.Message.find({}, function(err, data) {
    for(var i=0; i < data.length; i++) {
        allUsers.push(data[i].username);
    }
});

console.log(allUsers)

我坐在這里努力甚至使allUsers脫離功能,我想這甚至不是實現此目的的最佳方法。 對於allUsers我只是要檢查數組中是否存在新的用戶名。

因此,為了進一步擴展我在這里所做的工作,是使用一些socket.io代碼。 如果我可以讓allUsers正常工作,我將進行這樣的驗證。

socket.on('new user', function (data, callback) {

    if(data in allUsers) {
        callback(false);
    } else {
        callback(true);
        socket.userName = data;
        socket.connected = true;
        users[socket.userName] = socket;
        io.sockets.emit('user name', {usernames: users[socket.userName].userName, connected: users[socket.userName].connected});
    }

});

但是,如果沒有成功,那就不好了。 所以我的問題是我提供的內容(socket.io,mongodb)如何獲取所有模型並驗證數據庫中是否存在傳入data的新用戶?

models.Message.find是異步的,異步操作的結果僅在異步操作完成后才可用。因此console.log(allUsers)將始終生成一個空數組。

應該類似於(偽js代碼):

socket.on('new user', function (data, callback) {

    models.User.findOne({username:data.username},function(err,user){
        if(err){/*deal with error here */}
        else if(user){/*username already taken 
            respond with appropriate socket message here */
                socket.emit('user name already taken',{somemessage});
        }
        else{/* user with username not found */
            /*create new user into database then emit socket message */
            var user = new models.User(data);
            user.save(function(err,user){
                socket.emit('user name',{somemessage});
            })
        }
    });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM