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 中不起作用

Mongoose:通过 findOneAndUpdate 查询使用嵌套对象数组的总和更新父子数据属性不起作用

Kafka mongo db源连接器不起作用

MongoDB & Meteor - 推入嵌套数组的查询不起作用,没有抛出错误

使用 Mongoose 更新子数组对象不起作用