javascript - 更新 Mongo 文档内的数组不起作用

标签 javascript node.js database mongodb mongoose

我有一个用户的集合,每个用户都有一个订阅的对象数组。我想向该数组添加另一个订阅。我正在获取新的订阅,并使用 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,
  },

最佳答案

您的查询看起来不错,您可以使用 $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();

关于javascript - 更新 Mongo 文档内的数组不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65532594/

相关文章:

javascript - 上传到nodejs时损坏文件/图像

node.js - 如何在 React Native 中使用 Azure PubSub?

java - 如何使用 Derby JDBC 获取外键引用?

javascript - 移动版 Safari : JS event for jump to last scroll position on refresh

javascript - 获取文件输入值作为二进制数据

node.js - 为什么我的错误论点不被视为错误?

ruby-on-rails - 如何与不同计算机/远处的数据库进行交互? ( ruby )

sql - 如何在 T-SQL 中获取主机名?

javascript - IOS - cordova inappbrowser 错误,无法显示来自 iframe 的网页

javascript - 如何在 Apigee 中获取 HTTP header 的完整值?