如何使用 $elemMatch 查找和过滤并更新数组的所有元素该元素在猫鼬中有一个特殊的日期?

Posted

技术标签:

【中文标题】如何使用 $elemMatch 查找和过滤并更新数组的所有元素该元素在猫鼬中有一个特殊的日期?【英文标题】:How to find and filter with $elemMatch & update all elements of array That element has a special Date in mongoose? 【发布时间】:2021-11-24 07:32:45 【问题描述】:
 const user = await User.findOneAndUpdate(
       '_id': userID,
       'personInfo':  $elemMatch:  date:  $eq: specifiedDate   ,
     ,
     'personInfo',
   ).select( personInfo: 1 )
    .exec();

 user.personInfo.age ++;
 await user.save();

这将返回所有没有 specifiedDate 过滤器&的数组 之后如何更新新元素而不被其余数组元素替换

【问题讨论】:

【参考方案1】:

你可以像这样使用 $elemMatch

exports.findFriend = async (userName, user) => 
    return await User.update( _id: user._id,friends: $elemMatch:  userName: userName ,updateQuery  );
;

【讨论】:

感谢您的回答,兄弟,您应该使用 updateMany() 由于不推荐使用更新,并且您的此语法有一个额外的括号

以上是关于如何使用 $elemMatch 查找和过滤并更新数组的所有元素该元素在猫鼬中有一个特殊的日期?的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB:$ elemMatch和$ and和在数组内查找对象之间有什么区别?

在 Mongo Aggregation 中获取 ElemMatch 以查找 null 或不存在的数组对象

MongoDB (Mongoose) 如何使用 $elemMatch 返回所有文档字段

MongoDb $elemMatch 与 $lookup 变量

如何查找特定的数字长度,并使用 Notepad++ 删除/过滤其余部分?

动态更新 react-table 中可用记录数的计数