我陷入了异步算法:
我有一系列的猫鼬模型:
var allRefDatasSchemas = {
RefAllotement: mongoose.model('RefAllotement', RefDataSchema),
RefModeleConstructeur: mongoose.model('RefModeleConstructeur', RefDataSchema),
RefTypeKit: mongoose.model('RefTypeKit', RefDataSchema),
RefTypeUtilisation: mongoose.model('RefTypeUtilisation', RefDataSchema),
};
我想抓取每个集合的所有项目,并将它们放入数组或类似的内容中。如果这样做,this
则find
回调的关键字不会引用当前模型,因此我无法知道哪些模型项属于
var results = {};
for (var model in allRefDatasSchemas) {
allRefDatasSchemas[model].find(function(err, data) {
// 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.
results[this.modelName] = data;
// if I use "model" variable, it doesn't work, because asynchronous callback
});
}
我也尝试了异步库,但没有成功,因为我总是回到同一问题:无法知道哪个模型在回调内执行find查询。同上,then
如果我使用诺言。
请帮助我:)你会怎么做?
EDIT
model.find调用query.find,query.find调用mquery.find。在mquery.find中,通过丢失该引用的时间来调用回调:this._collection.find(conds,options,utils.tick(callback));
/编辑
请检查此代码段,我已为您提供了所需的工作样本。 请检查代码中的注释以更好地理解。
示例工作代码与您所需的类似。
/*
* 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)
});
输出 将采用这种格式
finish { RefAllotement:[
// Result of RefAllotement query
],
RefModeleConstructeur:[
// Result of RefModeleConstructeur query
],
RefTypeKit:[
// Result of RefTypeKit query
],
RefTypeUtilisation:[
// Result of RefTypeUtilisation query
]
}
我刚刚被这个问题缠住了。我有两个猫鼬模式: 问题是,如何从每个父文档中获取所有子文档(在这种情况下,对象)?假设我有一些数据: 我想在一个查询中检索所有18岁以上的儿童。有可能吗?每一个回答都将不胜感激,谢谢!
问题内容: 在阅读教程时,通常会在模式和模型之间进行区分,特别是在处理mongoose / mongodb时。由于在该系统下似乎不存在“模型”,因此移植到Postgresql会有些混乱。两种方法有什么区别? 例如,此行的postgres / sql ORM等价于什么? (猫鼬和express.js): 问题答案: 在猫鼬中,模式表示特定文档的结构,可以是完整文档,也可以是文档的一部分。这是表达期望
在前端,我有3个层次结构。 顶层显示一个测试摘要,包含统计信息,如%通过/失败、各种标签、运行标识等。 第二级由测试套件的各个部分组成,这些部分可以通过顶级运行id访问。其中包含测试的名称,特定的测试通过/失败。 第三级是实际测试本身,包括报告、通过/失败状态等。 我使用的是平均堆栈,我想知道使用1、2或3种不同的Mongoose模型在MongoDB中存储数据的利弊。我知道在数组中使用嵌入式文档的
上节课说过Threejs场景对象Scene和各种子对象构成的层级模型就是一个树结构。如果你有一定的算法基础对树结构肯定会非常了解,如果你了解前端的DOM树结构也非常有助于本节课的学习,如果这些都不了解也没有关系,直接体验本节课的案例源码。 本文通过Three.js的一个类Group来介绍Threejs层级模型的概念,如果你对WebGL层级模型已经有一定的概念,直接把重点放在Group的了解上,如果
问题内容: 我有一个猫鼬模型与用户模型有关联,例如 当我实例化一个新模型时,我会做: 模型的构造函数需要使用许多参数,这些参数在架构更改时编写和重构很繁琐。有没有办法做类似的事情: 还是创建帮助器方法以生成JSON对象甚至将userId附加到请求正文的最佳方法?还是我什至没有想到的方式? 问题答案: 或者如果您要将userId复制到req.body中:
问题内容: 我想为特定模型中的Mongoose 方法创建一个存根,以便我创建的模型的任何实例都将调用该存根,而不是普通的Mongoose 方法。我的理解是,执行此操作的唯一方法是像这样对整个模型进行存根: 不幸的是,这行代码使我的测试抛出以下错误: 有人知道这里出了什么问题吗? 问题答案: 有两种方法可以完成此操作。首先是 如果您使用log mongoose.Model控制台,则会看到该模型可用的