javascript - Mongoose :复制查询结果

标签 javascript mongodb mongoose ecmascript-6

我有一个关于在 mongoose 中复制或映射查询结果的问题。以下是我的代码。

const user = await User.find({ birthYear: 1990 }).populate("friends").exec();
console.log(user); // (1)
console.log({ ...user }); // (2)

本以为(1)和(2)的结果应该是一样的,结果却大相径庭。 (1) 打印按 birthYear 筛选的文档数组。但是,(2) 打印了一个键为数字的映射,我认为它似乎是数组的索引。你能告诉我为什么会这样吗?

(1)的结果

[
  {
    _id: ...,
    birthYear: 1990,
    lotsOfData: ...,
  },
  {
    _id: ...,
    birthYear: 1990,
    lotsOfData: ...,
  }
]

(2)的结果

{
  '0': {
    _id: ...,
    birthYear: 1990,
    lotsOfData: ...,
  },
  '1': {
    _id: ...,
    birthYear: 1990,
    lotsOfData: ...,
  }
}

最佳答案

Mongoose 的 find() 方法总是在等待时返回一个数组,所以您可能应该调用您的数组 users 而不是 user。要复制您的数组,您应该使用

console.log( ...user );

在您的代码中,您正在基于提供的数组构建一个新的 JS 对象。因此,展开运算符将数组索引作为键并将数组的对象作为值放入新对象中(因为您使用了花括号)。

因此,您混合了扩展运算符的两个用例:...array 复制一个数组,而 { ...obj } 使用 obj 填充新对象 字段。在这种情况下,数组被 JavaScript 运行时“视为”对象,因此它的索引被评估为键。

关于javascript - Mongoose :复制查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59345249/

相关文章:

javascript:将对象作为参数传递给字符串内的onclick函数

javascript - jquery 导出表到 excel 以指数形式更改值

node.js - 无法将属性添加到 json 对象

javascript - 使用 javascript 和 html 选择第二个选项后发出警报

javascript - 简单的 Jquery 菜单按钮重复动画,我怎样才能停止这个?

mongodb - 限制 MongoDB 中的查询结果

node.js - MongoDB 由于键太大而无法建立索引而失败

node.js - 如何使用 Sails.JS + GridFS 从 Mongo 检索图像文件?

mongodb - Mongoose 是否真的验证了对象 ID 的存在?

javascript - MongoDB 查询大型集合