【问题标题】:Iterate through Mongoose findById遍历 Mongoose findById
【发布时间】:2018-06-11 21:30:09
【问题描述】:

我有运行猫鼬并成功返回以下结果的代码。

为什么我不能执行以下操作并从我的对象中获取值?

Object.keys(result).forEach(function(record){
            console.log("The value of result[record]: ", result[record]);
        })

如何遍历此对象以获取不同的键来获取列表和对象中的值?

我正在使用普通的 javascript。但我不介意一些较新的 ES 选项。

{ owner: { fullName: 'xxx', userName: 'xxx' },
  members: [ { userName: 'xxx', fullName: 'xxx', position: '' } ],
  admins: [ 'xxx','ashg' ],
  _id: 5a482302a469a068edc004e3,
  type: 'xxxx',
  name: 'xxxx xxxx',
  descrip: 'xxxx',
  startDate: '2018-01-01',
  endDate: ''
}

这是我想要复制的一个更简单的示例,它完全按预期工作:

var o={a:1,b:2,c:3};
var val;

Object.keys(o).forEach(function(key) {
    val = o[key];
    console.log(val);
});

Output: 1,2,3

【问题讨论】:

  • console.log("result[record]: ", record );的输出是什么

标签: javascript arrays object mongoose


【解决方案1】:

为什么我不能执行以下操作并从我的对象中获取值?

因为在您的代码中,您试图通过 result[record] 访问值,而记录不是值的关键,它只是值

只需打印record 即可

    result.forEach(function(record){
        console.log("The value of record: ", record );
        console.log("name is: ", record.name );
    });

【讨论】:

  • 我不确定这个答案。 console.log("result[record]: ", record ); 的值输出:The value of object[key]: $__ The value of object[key]: isNew The value of object[key]: errors The value of object[key]: _doc The value of object[key]: $init
  • 而使用result.forEach 的建议答案不起作用,因为我得到TypeError: result.forEach is not a function
  • 请更新您的问题以与console.log(result)分享您获得的输出
  • result 不是猫鼬查询的输出吗?
  • result.forEach 语法在我的猫鼬调用返回和对象数组时起作用。在这种情况下,我可以做record.<key> 并获得我的价值观。我不明白为什么这看起来如此复杂。按照 MDN 上的说明循环遍历对象以获取键,然后根据这些键检索值似乎对我不起作用。我显然错过了一些东西......https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
【解决方案2】:

假设result是一个Mongoose文档,你可以调用result.toObject()把它转换成一个普通的JS对象,这样你就可以在上面有效地使用Object.keys这样的方法了。

var o = result.toObject();
Object.keys(o).forEach(function(key) {
    console.log(o[key]);
});

但您也可以使用文档架构的eachPath 方法来获取文档属性并以这种方式进行迭代:

result.schema.eachPath((path, schemaType) => {
    console.log(result[path]);
}); 

【讨论】:

  • 谢谢!做到了!就这样我明白了,猫鼬返回对象的类型是什么? console.log(typeof(result)); 显示 object。此外,这是处理访问嵌套对象或猫鼬返回数据或任何一般对象中的值的最佳/最快最有效的方法吗?我的最终目标是访问和操作返回的 mongoose 对象中的嵌套成员对象列表。根据您的建议,我可以转换为对象并使用通常的 javascript 对象和数组方法,但在处理嵌套对象时似乎有点慢。
  • 这是您的模型的一个实例。如果您不需要模型实例,请在查询链上调用lean() 直接获取纯 JS 对象和更好的性能。见here
猜你喜欢
  • 2018-09-16
  • 2015-10-31
  • 2013-06-18
  • 2019-07-15
  • 2017-10-13
  • 2020-03-28
  • 1970-01-01
  • 1970-01-01
  • 2015-06-15
相关资源
最近更新 更多