【问题标题】:Mongoose: copying the result of queryMongoose:复制查询结果
【发布时间】:2020-04-08 05:52:58
【问题描述】:

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

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: ...,
  }
}

【问题讨论】:

    标签: javascript mongodb mongoose ecmascript-6


    【解决方案1】:

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

    console.log( ...user );
    

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

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

    【讨论】:

      猜你喜欢
      • 2015-12-07
      • 1970-01-01
      • 1970-01-01
      • 2019-05-31
      • 1970-01-01
      • 2011-04-20
      • 2017-11-19
      • 2020-11-25
      • 2020-04-01
      相关资源
      最近更新 更多