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

猫鼬find(),如何访问结果文件?

应翰飞
2023-03-14
问题内容

我刚开始和猫鼬一起玩。我有以下代码:

var ninjaSchema = mongoose.Schema({
    name: String,
    skill: Number
});

var Ninja = mongoose.model('Ninja',ninjaSchema);

module.exports = {
init : function(){
    console.log('Connecting to database');
    mongoose.connect('mongodb://localhost/mydb');
    var db = mongoose.connection;
    db.on('error', console.error.bind(console, 'connection error:'));
    db.once('open', function callback () {
      console.log('Successfully connected!');
    });
},
createNinja : function(name,skill){
    var n = new Ninja({name:name,skill:skill});
    n.save(function(err,n){
        if (err)
            console.log('saving failed');
        console.log('saved '+ n.name);
    });
},
getNinjas : function(){
    var res = null;
    res = Ninja.findOne({},'name skill',function(err,docs){
        if (err)
            console.log('error occured in the query');
        return 'ninja name: '+docs.name+' ninja skill: '+docs.skill;
    });

    return res;
}

将条目添加到数据库中没有问题,但是检索它们时遇到了问题。我对整个工作原理有些困惑。我的理解如下:

有一些架构,就像oop中的类一样,因此只是数据库中记录的蓝图。该模型是一条记录,可以,也许更多,因为我看到您可以向模型添加方法。好吧…我不太了解如何使用它们。你能给我一个线索,他们到底是什么?

返回主题:发出find命令时,它会调用匿名函数,而docs应该是结果正确吗?现在如何访问它们?从现在开始,如果我记录资源,我将得到以下信息:

{ options: {},
safe: undefined,
_conditions: {},
_updateArg: {},
_fields: { name: 1, skill: 1 },
_geoComparison: undefined,
op: 'findOne',
model: 
{ [Function: model]
 base: 
  { connections: [Object],
    plugins: [],
    models: [Object],
    modelSchemas: [Object],
    options: {} },
 modelName: 'Ninja',
 model: [Function: model],
 db: 
  { base: [Object],
    collections: [Object],
    models: {},
    replica: false,
    hosts: null,
    host: 'localhost',
    port: 27017,
    user: undefined,
    pass: undefined,
    name: 'mydb',
    options: [Object],
    _readyState: 1,
    _closeCalled: false,
    _hasOpened: true,
    _listening: true,
    _events: [Object],
    db: [Object] },
 schema: 
  { paths: [Object],
    subpaths: {},
    virtuals: [Object],
    nested: {},
    inherits: {},
    callQueue: [],
    _indexes: [],
    methods: {},
    statics: {},
    tree: [Object],
    _requiredpaths: [],
    options: [Object],
    _events: {} },
 options: undefined,
 collection: 
  { collection: [Object],
    opts: [Object],
    name: 'ninjas',
    conn: [Object],
    queue: [],
    buffer: false } } }

另外,如果我使用Ninja.find(...,function(err,docs){ ... })如何浏览文档?或者如何检索记录?


问题答案:

我发现了问题。这更多是一个概念上的问题:我正在处理异步调用,并试图从另一个函数返回结果,并且不知道何时执行。因此,发生的事情是我请求执行db查询并返回结果,结果为null。这段代码:

getNinjas : function(){
    var res = null;
    Ninja.find({},'name skill',function(err,docs){
        if (err)
            console.log('error occured in the database');
        console.log(docs);
    });     
    return res;
}

返回null,但是!console.log(docs)将数据库中的所有值打印到控制台,这是我试图做的。现在,我需要进行更改,最有可能传递一个回调,该回调将在收到结果后执行。

进行更改后,代码如下所示:

getNinjas : function(res){
    var twisted = function(res){
        return function(err, data){
            if (err){
                console.log('error occured');
                return;
            }
            res.send('My ninjas are:\n');
            console.log(data);
        }
    }

    Ninja.find({},'name skill',twisted(res));
}

这样,我就可以传递响应对象,以便发送忍者的名字:)



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

  • 问题内容: 我能找到的所有带有猫鼬结果的页面都可以做到这一点: 如何从查询中返回结果,更像这样? 这样我就可以在页面上发布多个结果? 喜欢: 能做到吗? 问题答案: 您正在尝试强制执行同步范例。就是行不通。node.js是单线程的,大部分情况下- 完成io后,便产生了执行上下文。信令通过回调进行管理。这意味着您具有嵌套的回调,命名函数或流控制库,以使外观看起来更好。 https://github.

  • 问题内容: 我将一些数据存储在mongodb中,并使用js / nodejs和mongoose访问它。我可以使用.find()在数据库中找到合适的东西,这不是问题。问题是如果没有东西,我想做点其他事情。目前,这是我正在尝试的: 当我执行act.params不在尼克索引中的操作时,这些命令都不会触发。发生这种情况时,我什么都不需要控制台,但是当它确实存在时,我确实让user.nick可以很好地进行记

  • 问题内容: 我在解决此mongodb(猫鼬)问题时遇到很多困难。 存在此模式“推荐”(用户名,roomId,ll和日期),其集合包含对用户的推荐。 我需要获取最推荐的房间列表(按roomId)。下面是模式和我尝试过的猫鼬查询解决方案。 问题答案: 从聚合管道返回的结果只是普通对象。因此,您将排序作为流水线阶段而不是作为单独的操作进行: 因此,也可以使用多种流水线运算符 或 或 和其他东西。这些可以

  • 问题内容: 我已经定义了此路由,但是对它的任何请求都会卡在“待处理”中并永远运行。 当我记录代码时,我看到后面跟着,这意味着find方法中的代码永远不会执行 模型 关于这是为什么的任何想法? 问题答案: 在您致电之前,您的猫鼬查询只会简单地排队。 在启动代码中添加如下代码以进行连接: 在连接字符串中,用数据库名称替换。

  • 问题内容: 我有以下架构(在咖啡脚本中表示歉意) 我只想恢复一条肯定在我的数据库中的记录: 不幸的是,这总是记录下来。在mongo shell中总是返回一个值。到底是怎么回事? 问题答案: 发现问题,需要改用: