有没有mongodb for nodejs 的插件在查询的时候可以返回查询结果?
有没有mongodb for nodejs 的插件在查询的时候可以返回查询结果?
目前找了几个nodejs的插件,mongoose,mongous等等,都是在查询方法里面使用回调函数来返回查询结果,但是我的node脚本需要把查询结果return出来,而不只是单纯的给console.log用啊。各位亲们有解决办法么?
例如:
index.prototype.a = function(){
var vars = {};
vars.something1 = {};
vars.something2 = 123;
mongous("db.test").find({name:'shura'},function(r){
if(r){
vars.something3= true;
}else{
vars.something3= false;
}
});
return vars;
}
我怎么才能在返回中存在vars.something3这个数据?
P.S.
我用到mongo主要是为了快速查询某个数据是否存在,然后根据返回来给定一个对象的一个或多个变量的值,然后整个代码返回这个对象。而并非根据返回做一些mongous外面获取不到的处理。因为我需要写的这个代码是给别的程序调用的一个数据处理对象,我需要返回一个处理过的数据对象。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
今天在NPM里面闲逛,还真发现了同步返回的一个插件mongo-sync,分享出来。
下面是它的example:
还是再次感谢各位的解答
首先有一个前提没有确定,不知道你需要把结果返回出来之后用在哪儿以及怎么用?这将影响你如何写代码。
那么我假设你是这样的情况,你有一个函数,这个函数需要使用异步请求的结果(我写比较通用的例子,不受限在 MongoDB 之下),一个可行的办法是这样的:
P.S. 请忽略我对问题的评论,当时没看清是异步回调。
我看了你的补充,这里可以看出你对异步请求还不是很熟悉。你对
arr
的赋值其实是成功,但是仅限于异步请求的回调函数之内,而外层的console.log(arr)
肯定不会是你期望的结果就是因为这句代码里的arr
还没有被赋值(异步回调实际上是在console.log
之后发生的)。这里真正的问题是你究竟要如何使用
arr
,按照你的意图,arr
的使用是一定依赖于对于 mongo 的请求的,因此对于arr
的后续逻辑也一定要在异步回调运行之后才能生效。我猜测你的困惑在于你不想在异步回调里写太多代码,因为可能不好组织。但是这个解决办法有很多,我建议你学习一下 Promises。在这里,我用简单的方式帮你整理一下。
意思是:你不必使用一个全局(相对地)对象来保存你向数据库请求的结果,而是直接编写你的业务逻辑,然后把这些业务逻辑根据需要作为对数据库的请求回调来执行即可。
如果你觉得还是不够用,那么请提供更完整的例子我们再分析。
如果硬要实现可以使用step或者async库,但你的思维方式没有转变到node.js的异步思维。建议还是参考 @nightire 的答案