NodeJS & Mongoose - Uppdatera objekt i array

Trädvy Permalänk
Medlem
Plats
127.0.0.1
Registrerad
Apr 2010

NodeJS & Mongoose - Uppdatera objekt i array

Tjenare,
har småproblem att greppa exakt hur detta genomförs i NodeJS. Är komplett nybörjade för NodeJS med Mongoose och även hur MongoDB exakt fungerar. Hittills har jag bara kodat i SQL-databaser med C#, php och ASP.NET så är inte alls van vid detta.

Jag har ett objekt som innehåller en array av objekt, vad jag vill göra är att kunna uppdatera enskilda objekt så enkelt som möjligt.

Min kod hittills:

Mitt objekt:

var schema = mongoose.Schema({ name: [{ first: String, last: { type: String, trim: true } }], department: String, age: { type: Number, min: 0, max: 65 }, entries: [{ starts: String, ends: String, date: { type: Date, index: true }, exclude: { type: Boolean, default: false }, lunch: { type: Number, default: 0, min: 0, max: 60 } }] });

Uppdatera objekt i array:

router.put('/change/:id', function(req, res){ var id = req.params.id; person.findOneAndUpdate( { _id: id }, { $set: { starts: req.body.starts, ends: req.body.ends, lunch: req.body.lunch, exclude:req.body.exclude, date: req.body.date } }, { new: true }, function(err, doc){ if(err){ console.log(err); res.status(500).send(); } else{ res.status(200).send(); } } ); });

Dold text

Objektet jag försöker uppdatera ser i slutändan ut såhär:

[1] 0: { "_id": "57dd20f28676462854106361" "age": 18 "__v": 0 "entries": [1] 0: { "date": "2016-09-17T00:00:00.000Z" "ends": "16:00" "starts": "07:00" "_id": "57dd213e8676462854106363" "lunch": 60 "exclude": false }- - "name": [1] 0: { "first": "Demo" "last": "exemplar" "_id": "57dd20f28676462854106362" }- - }

Dold text

Att skapa objektet och att radera det har jag inga problem med. Men att uppdatera ett objekt i den array som finns (entries) går inte så bra.

Jag använder Advanced Rest API tillsammans med Brackets för att koda. I ARA så skickar jag en PUT till http://localhost:3000/change/57dd213e8676462854106363 med application/json info:

{ "starts": "08:30", "ends": "20:00", "exclude": false, "lunch": 60, "date": "2016-09-17" }

Dold text

samma resultat även om jag skickar den med id 57dd20f28676462854106361 (själva objektets).

Jag får kod 200 på försök att skicka detta, så inget går ju fel, men det blir ju inte korrekt heller.

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
AzireVPN - Felkod40

Trädvy Permalänk
Medlem
Plats
hemma
Registrerad
Maj 2006

Du måste säga vart id:t du vill söka på finns.
Testa följande:

person.findOneAndUpdate( { 'entries._id': id }, { $set: { 'entries.$.starts': req.body.starts, 'entries.$.ends': req.body.ends, 'entries.$.lunch': req.body.lunch, 'entries.$.exclude':req.body.exclude, 'entires.$.date': req.body.date } }, { new: true }, function(err, doc){ if(err){ console.log(err); res.status(500).send(); } else{ res.status(200).send(); } } );

Trädvy Permalänk
Medlem
Plats
127.0.0.1
Registrerad
Apr 2010

Tack @Wickit, kan inte förstå att det var så litet fel jag gjorde... skämmigt.
Testade och fungerar perfekt

Citera om du vill ha svar, hjälpte jag dig, gilla svaret!
AzireVPN - Felkod40