简体   繁体   中英

MongoDB: how can I pull an entire object from an object array that matches the Objectid?

My question is, how I can pull a team object in teams that matches the unique _id of a team(in teams array). Here is what I have tried, however, the problem is that all entries in teams get deleted, instead of only the object that matches the team _id .

 router.put("/delete/team/:id/:org", (req, res) => { const orgid = req.params.org; const _id = req.params.id; Organization.findOneAndUpdate( { _id: orgid, }, { $pull: { teams: { _id: _id }, }, }, { multi: true } ).then((organization) => { res.status(200).json(organization); }).catch((err) => { res.status(400).json(err); }); });

Each Organization in OrganizationSchema has a unique _id . Also, each team(object) in teams array has a unique _id .

 const OrganizationSchema = new Schema({ owner: { type: mongoose.Schema.Types.ObjectId, ref: "User", }, register_date: { type: Date, default: Date.now, }, teams: [ { sport: { type: String, required: false, }, access_code: { type: Number, required: false, }, admin: [{ type: mongoose.Schema.Types.ObjectId, ref: "User" }], events: [ { date_time: { type: Date, offset: true, }, opponent: { type: String, required: true, }, home_away: { type: String, required: true, }, expected_attendance: { type: Number, }, people_attending: [ { type: mongoose.Schema.Types.ObjectId, ref: "User" }, ], amenities: [String], }, ], }, ], });

The probable reason for the output you are getting is, because you are matching an ObjectId with a string.

You need to convert your string to an object.

You can do this by adding,

const ObjectID = require('mongodb').ObjectID

And then,

 $pull: {
        teams: { _id: new ObjectID(_id) },
      },

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM