在mongodb中删除具有空数组值的键

问题描述 投票:0回答:1

当我在数组中保留一个项目并将其删除时,该字段变为空。是否有任何选项可以检查是否还有一个元素,然后使用undefined更新密钥而不是删除?

这是我有的:

User.aggregate([
    {$match: {email: {$in: [email, friendEmail]}}},
    {
      $project: {
        friendSentRequests: {$size: {"$ifNull": ["$friendSentRequests", []]}},
        friendReceivedRequests: {$size: {"$ifNull": ["$friendReceivedRequests", []]}},
      }
    }],
  (err, result) => { ... }
);

使用上面写的方法,我确实得到了数组大小,但是如果一个doc没有第二个doc拥有的密钥,batch会抛出数组类型为missing的错误。除非我不打算在(err, result) => {..}函数中进行任何更新,否则还有另一种推荐的方法来更新对象。

我不想设置multi,因为我想通过batch更新来自不同文档的两个不同的密钥,我无法获得每个字段的数组长度。除非我误解了multi是如何工作的。

javascript mongodb mongoose
1个回答
2
投票

如果你想确认数组中元素的数量,例如,你想要检查数组是否有一个元素:

{
    $match:{
      "myArray" :{ $size : 1 }
    }
}

并检查数组是否不存在:

   {
    $match:{
      "myArray" :{ $exists: false}
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.