Получение неопределенных при обновлении многих с помощью Mongoose - PullRequest
1 голос
/ 10 февраля 2020

У меня есть приложение Node.js, которое использует Mon goose. js для взаимодействия с MongoDB. Я пытаюсь сделать так, чтобы при выполнении определенного действия (обновление плана) оно обновляло всех пользователей с определенным идентификатором компании (ie всех пользователей, принадлежащих этой компании). Ниже мой код возвращает неопределенное количество найденных и обновленных.

const updated = User.updateMany({ companyID: req.body.companyID }, { 'company.stripe.plan': req.body.plan });
console.log(updated.n)
console.log(updated.nModified)

req.body

{ company:
   { stripe:
      { plan: '<>',
        subscriptionId: '<>',
        customerId: '<>',
        last4: '<>' },
     companyName: '<>'},
  isVerified: true,
  _id: '<>',
  email: '<>',
  companyID: 'fc5a653c-2f68-4925-9ff2-93fde2157453',
  updatedAt: '2020-02-10T01:32:53.510Z',
  createdAt: '2020-02-04T00:44:27.971Z',
  __v: 0,
  lastLogin: '2020-02-10T00:46:16.118Z',
  plan: '<>',
  subscriptionId: '<>' }

Я отредактировал некоторую информацию, которая не нужна и, вероятно, не следует делиться Первая часть req.body на самом деле представляет собой одного пользователя, отправляемого в API вместе с планом и subscriptionId, показанными внизу.

Мой console.log, увиденный в моем первом фрагменте, возвращает неопределенное значение, когда я ожидайте, что он вернет 2 найденные записи и 2 обновленные / измененные.

РЕДАКТИРОВАТЬ ** Видя, что здесь неясно, моя уменьшенная модель пользователя

var mongoose = require('mongoose');
var passportLocalMongoose = require('passport-local-mongoose');
var timestamps = require('mongoose-timestamp');
var bcrypt = require('bcrypt-nodejs');

var UserSchema = new mongoose.Schema({
    email: {
        type: String,
        required: true,
        unique: true
    },
    password: String,
    companyID: {
        type: String,
        required: true
    },


    company: {
        stripe: {
            customerId: String,
            subscriptionId: String,
            last4: String,
            plan: {
                type: String,
                default: 'default'
            },
        }
    },
    lastLogin: Date,
    lastChangedBy: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'User'
    }
});

Функция со всеми, кроме необходимой удалено

exports.plan = function(req, res, next) {
...
    console.log(req.body)
    console.log(req.body.companyID)
    const updated = User.updateMany({ companyID: req.body.companyID }, { 'company.stripe.plan': req.body.plan });
    console.log(updated.n)
    console.log(updated.nModified)
    return res.json({success: true})
....
}

1 Ответ

0 голосов
/ 10 февраля 2020

Решено, проблема была ключом в ключе / значении для обновления, оно не работало с точечной нотацией, однако, когда я переключился на нотацию в скобках, теперь работает. Я думаю, что это может быть ограничение mon goose, так как у меня есть ощущение, что я столкнулся с этой ошибкой раньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...