sql >> データベース >  >> NoSQL >> MongoDB

MongoDBのネストされたクエリは、最後に発生した結果のみを返します

    js asyncをナビゲートするために、socket.ioを使って何度かやりとりしましたが、うまくいきました

    サーバー側

    var query = records.find({$or:[{starter:data},{receiver:data}]},{});//check the records table for all persons the logged in user has spoken to
    query.sort('-createDate').exec(function (err, docs){
        if(err) throw err;
    
        for(var i=docs.length-1; i>= 0; i--)
        {
    
           var starter  = docs[i].starter;
            var receiver = docs[i].receiver;
            var lasttxt = docs[i].lastMessage; 
    
            if (starter == socket.usernames){
              var target = receiver;
            }else
            {
              var target = starter;
            }
    
          var userlast = target+" "+lasttxt;
                    socket.emit('lastly', userlast);//Emit the username and last message for the client to emit back here
        }
    })
    

    クライアント側で、送信されたデータを取得します

     socket.on('lastly', function(data){//Recieve the data and send right back
                      socket.emit('lastly2', data);
                  });
    

    サーバー側に戻って、返送されたデータを取得します

    socket.on('lastly2', function(data){//receive the username and last message to work with
    
    var check = data;
    var space = check.indexOf(' ');
    var name = check.substr(0, space);
    var msg = check.substr(space+1);
    
    usersrec.find({username:name},{}).lean().exec(function (errx, docx){
                if(errx) throw errx;
    
                docx[0].message = msg;
                socket.emit('usernames', docx);
          });
    

    ええ、それはおそらく非正統的ですが、少なくともそれは仕事を成し遂げます。私はより良い提案を受け入れています




    1. マングースのArrayFilter

    2. Python dictを使用してMongoEngineドキュメントを更新しますか?

    3. 文字列からMongoDBObjectIDへの変換

    4. 集合体からMongodbカーソルを反復処理します