sql >> Databáze >  >> NoSQL >> MongoDB

mongoose :vyhledejte data smyčkováním na řadě modelů

Zkontrolujte prosím tento úryvek kódu, vytvořil jsem funkční ukázku toho, co potřebujete.Pro lepší pochopení si prosím zkontrolujte komentáře v kódu.

Ukázkový pracovní kód podobný tomu, co jste požadovali. Další ref ques pro použití async s mongoose.

/*
 * Object to store all models
 */
var allRefDatasSchemas = {
  RefAllotement: mongoose.model('RefAllotement', RefDataSchema),
  RefModeleConstructeur: mongoose.model('RefModeleConstructeur', RefDataSchema),
  RefTypeKit: mongoose.model('RefTypeKit', RefDataSchema),
  RefTypeUtilisation: mongoose.model('RefTypeUtilisation', RefDataSchema),
};
/*
 * need an array to run all queries one by one in a definite order using async waterfall mwthod
 */
var arr = [];
for(each in allRefDatasSchemas) {
    arr.push(each);
}

/*
 * Callback function for initiation of waterfall
 */
var queue = [
    function(callback) {
        // pass the ref array and run first query by passing starting index - 0
        callback(null, arr, 0)
    }
];

/*
 * Object to store result of all queries
 */
var finalResult = {};

/*
 * Generic Callback function for every dynamic query
 */
var callbackFunc = function(prevModelData, currentIndex, callback) {
    allRefDatasSchemas[arr[currentIndex]].find(function(err, result) {
        if(err) {
            console.log(err)
        } else {

            // Your Query
            // 
            // I'd like to do something like that :
            // but this.modelName is null, because it isn't the model
            // on which the find is done.

            // arr[currentIndex] will point to 
            // RefAllotement, RefModeleConstructeur etc. as you required
            finalResult[arr[currentIndex]] = result

            // send current result to next interation if required or you can skip
            // and increment the currentIndex to call next query 
            callback(null, result, currentIndex + 1)
        }
    })
}

/*
 * Add callback function for every dynamic query
 */
for(each in allRefDatasSchemas) {
    queue.push(callbackFunc);
}

/*
 * Run all dynamic queries one by one using async.js waterfall method
 */
async.waterfall(queue, function (err, result) {
    // Final object with result of all the queries
    console.log('finish', finalResult)
});

výstup bude v tomto formátu

finish { RefAllotement:[
        // Result of RefAllotement query
    ],
    RefModeleConstructeur:[
        // Result of RefModeleConstructeur query
    ],
    RefTypeKit:[
        // Result of RefTypeKit query
    ],
  RefTypeUtilisation:[
        // Result of RefTypeUtilisation query
    ]
}



  1. Jaké jsou případy použití, kdy je Redis preferován před Aerospike?

  2. Jak implementujete automaticky se zvyšující primární ID v MongoDB?

  3. Dynamické klíče po $group by

  4. Jak mohu implementovat oprávnění na úrovni pole pro MongoDB?