I'm encountering a strange behavior in MongoDB.
This is the schema of the documents in my collection:
{
"_id" : ObjectId("62bf10951fecaed4dba275b1"),
"name" : "Rack 1",
"type" : "rack",
"positions" : [
{
"number" : 1
},
{
"number" : 2
},
{
"number" : 3,
"nodes" : [
{
"number" : 1
}
]
},
{
"number" : 4,
"nodes" : [
{
"number" : 1
},
{
"number" : 2
},
{
"number" : 3
}
]
},
]
}
I would like to run two queries:
- create a new
position, if it doesn't exist yet - create a new object in the
nodesarray
I have created two queries so far:
db.getCollection('locations').updateOne(
{ _id: ObjectId("62bf10951fecaed4dba275b1") },
{ $addToSet: { 'positions': { number: 5 } } }
)
db.getCollection('locations').updateOne(
{ _id: ObjectId("62bf10951fecaed4dba275b1"), 'positions.number': 5 },
{ $addToSet: { 'positions.$.nodes': { number: 1 } } }
)
The second query creates a new element in nodes. BUT it also creates a new element in the positions array.
This is the erroneous object:
{
"_id" : ObjectId("62bf10951fecaed4dba275b1"),
"name" : "Rack 1",
"type" : "rack",
"positions" : [
{
"number" : 1
},
{
"number" : 2
},
{
"number" : 3,
"nodes" : [
{
"number" : 1
}
]
},
{
"number" : 4,
"nodes" : [
{
"number" : 1
},
{
"number" : 2
},
{
"number" : 3
}
]
},
{
"number" : 5,
"nodes" : [
{
"number" : 1
}
]
},
{
"number" : 5 <<<<<< THIS IS WRONG
},
]
}
Is there something I need to know or is simply the wrong query?
Many thanks