Mongo 文档中的更新数组不起作用
Posted
技术标签:
【中文标题】Mongo 文档中的更新数组不起作用【英文标题】:Update array inside of Mongo document doesn't work 【发布时间】:2021-04-08 11:17:17 【问题描述】:我有一个用户的集合,每个用户都有一个订阅对象数组。我想向该数组添加另一个订阅。我正在获取新订阅,并使用findByIdAndUpdate
对其进行更新,但它没有添加新订阅,但它显示文档已更新。我尝试了几种方法,但都没有奏效。
这是最后一种方法:
...
const user_id = req.params;
const subscription = req.body; // Getting subscription
const user = await UserModel.findById(user_id).lean().exec(); // Getting user by id
const push_subscriptions = user; // Getting subscribtions with destructuring
const updated_subs = [...push_subscriptions, subscription];
// Getting user another time and updating the push_subscriptions array
const updated_user = await UserModel.findByIdAndUpdate(user_id,
push_subscriptions: updated_subs,
new: true
).exec();
...
这里是请求正文和参数的日志
// body
endpoint: 'https://fcm.googleapis.com/fcm/send/cQ6wlRJ8t-s:APA91bEjqdLMzQLsroJ7zHzdjrzoshdPD8IJy_iIeRa8qV_Yjt6N1jeMUtyMq73wSn9JJT-4WXr_8uwHXttj-XFxHPCPAOqgN7zALsmf_BeIRZowRBTRHf9YH8v3AlcaZXWAIQ0qJNdn',
expirationTime: null,
keys:
p256dh: 'BBPC5h1QnBMPKMfPacgJu_2RFT7LAejyINh3CvP4pamkrlERr06YpRlSb7RbTUOn6MYW4adG93KfdEWXz68F9iQ',
auth: 'Zl3iaOdBvihXG2QVOb26IQ'
//params
user_id: '5fedc679f414663c693cf549'
用户架构,push_subscriptions 部分:
push_subscriptions:
type: Array,
,
【问题讨论】:
【参考方案1】:您的查询看起来不错,您可以使用$push
进行单个查询,而不是手动处理,
const user_id = req.params;
const subscription = req.body;
const updated_user = await UserModel.findByIdAndUpdate(user_id,
$push:
push_subscriptions: subscription
,
new: true
).exec();
【讨论】:
您的查询看起来不错,可能是您遗漏了某些内容或验证 user_id 是否可用,请查看有效的playground 是的,也许问题出在其他地方:/ 无论如何感谢您的努力以上是关于Mongo 文档中的更新数组不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Mongoose:通过 findOneAndUpdate 查询使用对象数组的总和更新根数据属性不起作用
Mongoose:通过 findOneAndUpdate 查询使用嵌套对象数组的总和更新父子数据属性不起作用