当我在数组中保留一个项目并将其删除时,该字段变为空。是否有任何选项可以检查是否还有一个元素,然后使用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
是如何工作的。
如果你想确认数组中元素的数量,例如,你想要检查数组是否有一个元素:
{
$match:{
"myArray" :{ $size : 1 }
}
}
并检查数组是否不存在:
{
$match:{
"myArray" :{ $exists: false}
}
}