我试图从循环中的猫鼬中获取记录。但是它没有按预期工作。我有一系列带有问题和答案的哈希,我正在尝试从数据库中查找那些问题。这是我的循环:
for (var i=0;i < answers.length;i++)
{
console.log(i)
var question_ans = eval('(' + answers[i]+ ')');
var question_to_find = question_ans.question.toString()
var ans = question_ans.ans.toString()
console.log(ans)
quiz.where("question",question_to_find).exec(function(err,results)
{
console.log(results)
if (ans == "t")
{
user_type = results.t
}
else if (ans == "f")
{
user_type=results.f
}
})
}
而终端的结果是这样的:
0
t
1
f
[ { question: 'i was here',
_id: 5301da79e8e45c8e1e7027b0,
__v: 0,
f: [ 'E', 'N', 'F' ],
t: [ 'E', 'N', 'F' ] } ]
[ { question: 'WHo r u ',
_id: 5301c6db22618cbc1602afc3,
__v: 0,
f: [ 'E', 'N', 'F' ],
t: [ 'E', 'N', 'F' ] } ]
问题是我的问题在循环迭代后显示。因此,我无法处理它们。
请帮忙!问候
欢迎来到异步世界:-)
使用JavaScript,除了您的代码外,任何其他事情都会并行发生。这意味着在您的特定情况下,无法在循环结束之前调用回调。您有两种选择:
a)将循环从同步for循环重写为异步递归循环:
function asyncLoop( i, callback ) {
if( i < answers.length ) {
console.log(i)
var question_ans = eval('(' + answers[i]+ ')');
var question_to_find = question_ans.question.toString()
var ans = question_ans.ans.toString()
console.log(ans)
quiz.where("question",question_to_find).exec(function(err,results) {
console.log(ans, results)
if (ans == "t") {
user_type = results.t
} else if (ans == "f") {
user_type=results.f
}
asyncLoop( i+1, callback );
})
} else {
callback();
}
}
asyncLoop( 0, function() {
// put the code that should happen after the loop here
});
另外,我建议您学习此博客。它在异步循环阶梯上又包含两个步骤。非常有帮助,非常重要。
b)将您的异步函数调用放入格式为闭包的
(function( ans ) {})(ans);
并提供您要保留的变量(此处:)ans
:
for (var i=0;i < answers.length;i++) {
console.log(i)
var question_ans = eval('(' + answers[i]+ ')');
var question_to_find = question_ans.question.toString()
var ans = question_ans.ans.toString()
console.log(ans)
(function( ans ) {
quiz.where("question",question_to_find).exec(function(err,results) {
console.log(ans, results)
if (ans == "t") {
user_type = results.t
} else if (ans == "f") {
user_type=results.f
}
})
})(ans);
}
问题内容: 一般而言,我对Mongoose和MongoDB还是很陌生,所以我很难确定是否可以进行以下操作: 有更好的方法吗? 编辑 如有任何混淆,我们深表歉意。我想做的是获取所有包含有趣标签或政治标签的商品。 编辑 没有where子句的文档: 使用where子句,我得到一个空数组。 问题答案: 对于大于3.2的现代MongoDB,您可以在大多数情况下用作替代。这也有实际上做加盟,而不是什么“在服务
问题内容: 我在用猫鼬填充后无法通过在文档内部匹配的值来查询文档。 我的架构是这样的: 我想让所有用户拥有例如类型为“ Gmail”的电子邮件。 以下查询返回空结果: 我不得不像这样过滤JS中的结果: 有没有办法从猫鼬直接查询类似的东西? 问题答案: @Jason Cust 已经很好地解释了它- 在这种情况下,通常最好的解决方案是更改架构,以防止通过存储在单独集合中的文档的属性进行查询。 不过,这
问题内容: 我有一个问题,我希望能够获得一个集合的所有唯一城市,而我的代码如下所示: 在本地的MongoDb中,我可以做,但是似乎没有与Mongoose等效的东西。是我自己遍历所有文档的唯一选择,还是有更好的解决方案? 为了尝试使用应答者建议的基础,我尝试这样做: 但是,该字段为空,没有错误。我还希望能够仅通过名称获取所需的集合,而不是尽可能地过滤返回的内容。 问题答案: 只是为了给Mongoos
问题内容: 我需要在node.js中用猫鼬返回查询的结果。 如何返回值以将值设置为变量? 我需要做的是: 为了有: 非常感谢您的回复 。 我还有另一个问题。 如何使用find或findOne在查询运算符中传递变量?喜欢 : 问题答案: 有几种方法可以实现您想要的。 1.使用猫鼬查询 在这种策略中,您的函数返回一个Mongoose查询,您以后可以使用它来调用该方法并使用它来获取结果。 然后,您可以简
问题内容: 我正在尝试使用Mongoose制作动态条件,但是它并没有像我想象的那样起作用。 代码是这样的 如您所见,我正在尝试使用“索引”变量创建动态条件。有可能这样做吗? 先感谢您! 问题答案: 您需要分两步创建对象: 更新资料 现在,node.js 4+支持计算的属性名称,您可以一步完成此操作:
问题内容: 是否可以查询特定日期? 我在mongo Cookbook中发现我们可以针对某个范围进行查询 ,例如: 但是可能有特定的日期吗?这不起作用: 问题答案: 如果您保存在数据库中的日期没有时间(恰好是年,月,日),那应该可行。 您保存的日期可能是,其中包括时间成分。要查询这些时间,您需要创建一个包含一天中所有时刻的日期范围。