解构第一个 Array 项或如何强制 Mongoose 返回 Object 而不是 1-item Array

Posted

技术标签:

【中文标题】解构第一个 Array 项或如何强制 Mongoose 返回 Object 而不是 1-item Array【英文标题】:Destructuring first Array item or How to force Mongoose to return Object instead of 1-item Array 【发布时间】:2018-10-02 17:28:25 【问题描述】:

Mongoose 的.find 方法即使找到一个结果也返回 Array,它的逻辑

但例如我确定结果是 1 项或空数组

我怎样才能解构结果或请求猫鼬这样做?

Payments
  .find( ... )
  .sort( ... )
  .limit(1)
  .then(result => 
    result = result[0]; // need to write more conditions, this may throw an exception when array is empty
  )

【问题讨论】:

.then(([result]) => …)? 【参考方案1】:

此案例并非 Mongoose 独有。

可以是:

.then(results => 
  if (results.length) 
    const [result] = results;
    ...
  
);

或者:

.then(([result]) => 
  if (result) 
    ...
  
);

这两种方法在 Mongoose 中都有效,因为如果结果存在,则结果应该是真实的。

【讨论】:

【参考方案2】:

您可以使用findOne 方法而不是限制您的查询结果:

Payments
  .findOne( ... )
  .sort( ... )
  .then(result => 
    // ...
  )

【讨论】:

哦,我认为不可能将 .findOne.sort 混合使用,因为 Robo 3T(MongoDB 客户端)不允许这样做。谢谢。

以上是关于解构第一个 Array 项或如何强制 Mongoose 返回 Object 而不是 1-item Array的主要内容,如果未能解决你的问题,请参考以下文章

对函数声明强制执行 TSX 道具类型内联,该函数声明使用对象解构来声明道具

打字稿如何进行对象解构赋值

Spark SQL:array_contains 和自动插入的强制转换

当第一个属性为空或未定义时如何使用 ES6 对象解构默认为另一个属性

如何强制 Windows 索引“活动”[关闭]

rest operater剩余操作符