当前位置: 首页 > 面试题库 >

将查找查询中的结果猫鼬返回给变量

司英飙
2023-03-14
问题内容

我需要在node.js中用猫鼬返回查询的结果。

如何返回值以将值设置为变量?

我需要做的是:

var results = users.findOne({_id : users_list[i]['user_id']},{email : 1, credits : 1},{}, function(err, docs) {
    if( err || !docs) {
        console.log("No user found");
    } else {            
        return docs;
    };
});

为了有:

results = docs

非常感谢您的回复 。

我还有另一个问题。

如何使用find或findOne在查询运算符中传递变量?喜欢 :

var foo = "Blaa";

users.findOne({_id : users_list[i]['user_id']},{email : 1, credits : 1},{}, function(err, docs) {
    if( err || !docs) {
        console.log("No user found");
    } else {
        // I want to use the foo variable here
        console.log(foo);
    };
});

问题答案:

有几种方法可以实现您想要的。

1.使用猫鼬查询

在这种策略中,您的函数返回一个Mongoose查询,您以后可以exec使用它来调用该方法并使用它来获取结果。

function getJedisQuery(name){
   var query = Jedi.find({name:name});
   return query;
}

然后,您可以简单地使用它:

var query =  getJedisQuery('Obi-wan');
query.exec(function(err,jedis){
   if(err)
      return console.log(err);
   jedis.forEach(function(jedi){
      console.log(jedi.name);
   });
});

2.使用类似猫鼬的诺言对象

Moogose为类似诺言的对象提供支持。您所要做的只是有点类似于我在上面所做的事情,但是这次,您在exec没有回调的情况下调用了该方法。

function getJedisPromise(name){
   var promise = Jedi.find({name:name}).exec();
   return promise;
}

然后,您只需执行以下操作即可使用它:

var promise = getJedisPromise('Luke');
promise.then(function(jedis){
   jedis.forEach(function(jedi){
      console.log(jedi.name);
   });
})

正如此答案的注释部分中突出显示的那样,这些对象实际上不是诺言,需要考虑在内(请参阅查询不是诺言)。

3.使用猫鼬流

最后,猫鼬还支持流,并且流是事件发射器。因此,您可以获取流,然后订阅“数据”和“错误”事件。像这样:

function getjedisStream(name){
   var stream = Jedi.find({name:name}).stream();
   return stream;
}

然后,您可以简单地执行以下操作:

var stream = getJedisStream('Anakin');
stream.on('data', function(jedis){
   jedis.forEach(function(jedi){
      console.log(jedi.name);
   });
});
stream.on('error', function(error){
    console.log(error);
});

来源,以供将来参考。



 类似资料:
  • 问题内容: 我有这个电话: 我在哪里指定要返回的属性?在文档中找不到它。以上返回整个对象。我只希望返回一些属性。 这是我的架构: 我不想在我的休息电话中包含项目数组。 问题答案: 您使用投影。猫鼬查询文档中的第一个示例具有投影操作。 注意:不是真正的代码b / c,我用三颗星突出显示了重要的部分 该方案没有规定,但我认为例子是再清楚不过。

  • 问题内容: 我有一个使用名为Todo的模型的路由设置,如下所示: 但是,todos.length始终为0,因为它找不到任何结果。当我跑步时: 我确定我已连接到同一数据库。我可以在mongod控制台中看到连接。我的连接位于config / db.js文件中: 我的server.js中的连接如下: 在Mongo Shell中,我得到1个结果。我期望此结果将由find查询返回。有什么我想念的吗?我正在使

  • 问题内容: 我无法使用猫鼬的语法查询mongodb数据库。 我有一个架构,其坐标存储为数组,索引为: 我正在使用运行猫鼬查询: 我已启用,并且可以看到生成的调试信息: 在集合中插入2个坐标为的文档: 在坐标附近搜索文档: 查询不返回 结果。 我通过搜索证明了文档已在数据库中。它是我无法使用的地理空间查询。 我正在使用和 完整的工作示例如下: 架构:(model.js) 摩卡测试:(test.ts)

  • 我正在玩mongob,并将一些测试数据{name:"david"}输入到“用户”集合中。我通过键入mongoshell验证了数据在MongoDB中 结果: 在 node.js 脚本中,使用以下代码: 不返回任何结果 我没有发现任何错误,也没有错误。请告知

  • 问题内容: 我想在Monoose中将两个OR查询与AND结合在一起,例如以下SQL语句: 我在NodeJS模块中尝试了此操作,该模块仅从主应用程序获取模型对象: 但这是行不通的,所有OR条件都将像下面的SQL语句一样连接在一起: 如何在猫鼬中结合AND 和AND 的两个条件? 问题答案: 直接按以下方式创建查询对象可能是最简单的: 但是,您也可以使用最新的3.x Mongoose版本中提供的帮助程

  • 为了在Lucene查询返回的文档中显示突出显示的匹配词,Lucene搜索结果可能包含用于将文档作为匹配我的请求返回的词。 例如: > Lucene查询:"狗猫" 结果:[“狗很好”,“狗和猫是朋友”] 如何通过Lucene实现这一点?我无法手动处理猫或狗,也无法处理请求词和返回词之间的任何差异。