sql >> Database >  >> NoSQL >> MongoDB

Meerdere zoekopdrachten binnen mongodb-query

Het gedrag van Node.js is asynchroon, de programmeur moet coderen rekening houdend met dit gedrag. Gebruik terugbelverzoeken of beloften of een bibliotheek voor flow control. In je programma heb je mongo-query in de lus geplaatst, wat een slechte benadering van query's is. Gebruik in plaats daarvan de operator $in als u meerdere keren een query uitvoert. Het optimaliseert de prestaties van uw code en lost ook uw probleem met het verzenden van antwoorden op.

var resultSet = [];
        db.get('busstopcollection').find({id_bus_stop: parseInt(req.body.busstopid)}, function(e, docs){
            if(e || docs.length === 0) {
                console.log("Sorry, wrong id.");
                return e;
            }
            var bus_ids = [];
            for(var m=0; m<docs.length; m++){
                var auxRes = {};
                auxRes.id_bus = docs[m].id_bus; 
                bus_ids.push(parseInt(docs[m].id_bus)); // collect all ids 
                auxRes.id_bus_stop = docs[m].id_bus_stop;
                auxRes.coord_x = docs[m].coord_x;
                auxRes.coord_y = docs[m].coord_y;               
                auxRes.id_bus_variation = docs[m].id_bus_variation;
                resultSet.push(auxRes);         

            }
            // Query at one time for all document 
            db.get('buscollection').find({id_bus: {$in : bus_ids}}).toArray( function(e, busDocs){
                    // Now find and merge in one go
                    busDocs.forEach(function(eachBusDoc){
                        for(var i=0,len = resultSet.length;i< len;i++){
                            if(resultSet[i].id_bus == busDocs.id_bus ){
                                resultSet[i].s_origin_description = eachBusDoc.s_origin_description;
                                resultSet[i].s_destination_description = eachBusDoc.id_destination_description;
                            }
                        }
                    });             
                       res.send(JSON.stringify(resultSet));
                });
        });


  1. MongoDb afgedekte subcollectie

  2. Werkt de `$eq`-operator met matrixpuntnotatie?

  3. Variabelen gebruiken met MongoDB $lookup

  4. MongoExport Te veel positionele opties