Matt Webb Matt Webb - 3 months ago 29
Node.js Question

Mongoose findOneAndUpdate updating as ObjectId

I have the following schema:

let PlayerSchema = new mongoose.Schema( {
name: String,
country: String,
roundResults: [ {
round: Number,
result: String,
points: Number
} ]
} );


When I use
findOneAndUpdate
to update a document:

Player.findOneAndUpdate({ id: req.params.id },
{$push: {"roundResults": result }},
{safe: true, upsert: true, new : true},
(err, player) => {
if( ! err && player ) {
res.json( player );
} else {
res.json( err );
}
}
);


I get the following unexpected result:

[
{
"_id": "57c9eb55c2a07a401462e3ec",
"name": "Joe Bloggs",
"country": "England",
"__v": 0,
"roundResults": [
{
"_id": "57c9eba11c597d5e1460e4f0"
}
]
}
]


I don't have a
roundResults
schema but, I get an
_id
as shown above, I would expect to see,:

"roundResults": [
"round": 1,
"result": "1",
"points": 3
]


Can anyone explain why this is, or how I get this to nest the data I am displaying directly above?

Answer

Even if you pass literal object for sub documents, it is a Schema. And id would be generated for that. If it is an array define its type Array.

Attention that if you define any schema for a property it is considered as a subdoc and entity so it has id

Comments