Как запросить массив ObjectIds в мангусте? - PullRequest
0 голосов
/ 12 июня 2019

Я хочу обновить одну переменную объекта в массиве внутри моего документа. У меня есть документ событий и массив пользователей, прикрепленный к этому событию. Так что у меня есть конкретный идентификатор пользователя. Итак, во-первых, возможно ли найти этого пользователя в массиве пользователей с запросом Mongoose? Поскольку у меня есть документ событий, и внутри у меня есть массив User. После нахождения этого пользователя я хочу обновить его одну переменную.

exports.disableUsers = (req, res, next) => {
  let User;
  users: req.body.users; ///users Array
  for (var i = users.length - 1; i >= 0; i--) {
    if (users[i] == req.params.id1) {
      User = users[i]; ////Particular User
      break;
    }
  }
  Event.updateOne(
    { _id: req.params.id },
    {
      ///don't Know how to Update??
    }
  )
    .then(result => {
      console.log(result);
      if (result.n > 0) {
        res.status(200).json({ message: "Verification successful!" });
      } else {
        res.status(401).json({ message: "Not authorized!" });
      }
    })
    .catch(error => {
      res.status(500).json({
        message: "Verifying events failed!"
      });
    });
};

Выше моя disableusers функция. Так что кто-нибудь может рассказать, как найти и обновить конкретного пользователя в массиве объектов внутри документа события. И мой eventSchema выглядит так:

const eventSchema = mongoose.Schema({
  title: { type: String, required: true },
  content: { type: String, required: true },
  imagePath: { type: String, required: true },
  startDate: { type: Date, required: true },
  endDate: { type: Date, required: true },
  category: { type: String, required: true },
  is_private : { type: Boolean},
  max_users: {type: Number},
  eventFee: {type: Number},
  event_manager: [{ name: String, phone: String, email: String }],
  address: [{ street: String, city: String, state: String, country: String, zipcode: String }],
  creator: { type: mongoose.Schema.Types.ObjectId, ref: "User", required: true },
  verify:{type:Boolean,required:true},
  users:[{id:String,email:String,PhoneNum:String,firstName:String,lastName:String,city:String,disable:{type:Boolean,default:false}}]
});

1 Ответ

0 голосов
/ 15 июня 2019

Это было бы намного проще, если бы вы разделили пользователей в их собственную коллекцию, тогда вы могли бы просто обновить, используя user._id

Однако в вашем текущем случае это можно сделать так, если вы используете mongo 3.6+

это обновит user.disable до true, а также позволит обновить несколько пользователей в одном запросе

Event.update(
   { _id: req.params.id},
   { $set: { "users.$[user].disable" : true } },
   { 
     multi: true,
     arrayFilters: [ { "user.<Primary Key To Identify User>": { $in:<Array of values to match to the primary key on user> } } ]
   }
)
...