如何使用MongoDB和express存储多个查询值
How to store multiple query values with MongoDB and express?
app.get('/ratings', function (req, res){
db.database.find({rating:5}).count(function(err, doc) {
review.FiveStarCount=doc;
});
db.database.find({rating:4}).count(function(err, doc) {
review.FourStarCount=doc;
});
我不熟悉使用 MEAN 堆栈并尝试返回 5 星和 4 星评论数量的值。我可以很好地检索 5 星的数量,但是当我做多个时,我似乎遇到了麻烦,不知道如何设置它。
您需要了解如何在执行异步操作时处理控制流的要点。与 php 不同,当您运行异步操作时,函数执行不会停止。要完成您尝试执行的操作,第二个数据库调用需要位于第一个数据库调用的回调中。试试这个。
app.get('/ratings', function (req, res, next) {
db.database.find({rating:5}).count(function(err, doc) {
// always handle error first
if (err) {
return next(err);
}
if (doc) {
review.FiveStarCount = doc;
}
db.database.find({rating:4}).count(function(err, doc) {
if (err) {
return next(err);
}
if (doc) {
review.FourStarCount = doc;
}
console.log(review.FiveStarCount, review.FourStarCount);
});
});
}(;
所以看起来你正在反对JavaScript的异步性质。 在上述函数的情况下,它们不会按照您编写的顺序执行(您也不需要它们!(,因为它们是异步的。 在了解有关问题的更多信息时,很少有简单的解决方案可以让您继续前进。
解决方案 1:嵌套回调。 难以阅读。 此外,它会在触发第二个之前等待第一个完成,这可能会减慢所有速度。
app.get('/ratings', function(req, res) {
var review = {};
db.database.find({rating:5}).count(function(err, doc) {
review.FiveStarCount = doc;
db.database.find({rating:4}).count(function(err, doc) {
review.FourStarCount = doc;
// DO something with data
res.json(review);
});
});
解决方案 2:闩锁。 这样做的好处是并行发出请求,并且阅读起来不会那么糟糕。
app.get('/ratings', function(req, res) {
var review = {};
db.database.find({rating:5}).count(function(err, doc) {
review.FiveStarCount=doc;
if (review.FiveStarCount && review.FourStarCount) {
// DO something here
// Will only execute if the other has finished
}
});
db.database.find({rating:4}).count(function(err, doc) {
review.FourStarCount=doc;
if (review.FiveStarCount && review.FourStarCount) {
// DO something here
// Will only execute if the other has finished
}
});
});
当然还有更多的解决方案,例如更好的查询或承诺。 也许在这里阅读更多关于异步 JavaScript 的信息,以获得更好的理解。
相关文章:
- 如何有效地将游戏数据存储在URL查询字符串中
- 将数据库查询存储在nodejs中(使用socket.io)
- 如何存储一个对象数组,这些对象是 ajax 查询从 javascript 中的 JSON 中提取数据的结果
- 在 Azure 表存储的插入函数中查询其他表
- j查询存储定位器标记
- 嵌套路由:如何查询 Rails DB 并将值存储在 JavaScript 变量中
- 谷歌数据存储查询中的多项选择抛出 API 错误:前提条件节点中失败错误
- Extjs 4 存储 - 查询整个存储,而不仅仅是缓存的记录
- 如何查询外部域,将其存储在chrome扩展中,并调用它在popup.html中显示
- 如何在mongodb中查询id存储在$in的“var-ids”数组中的文档
- 如何使用MongoDB和express存储多个查询值
- 使用mongoose和node.js存储查询后的变量数据
- 如何查询存储在对象中的id和属性
- 我正在尝试使用java脚本存储click事件上的列表项,并将其访问到另一个页面进行sql查询,但我做不到
- 支持类似查询的本地存储库
- 如何自动查询网页,解析页面上显示的数据并将其存储在数据库中
- Mysql查询到js..并将结果存储在var中
- 查询本地存储条目而不引发错误
- 将MongoDB查询中的数据存储到对象中,每20分钟更新一次
- 如何在客户端机器上存储和重用php/mysql查询