I know the title of this question is quite a mouthful but I hope you understand what exactly I mean if I provide an example.
This is my MongoDB structure:
{
"_id":{
"$oid":"62408e6bec1c0f7a413c093a"
},
"visitors":[
{
"firstSource":"123456",
"lastSource":"",
"email":"",
"deviceIds":[
"a7d5083e5c5df543a3e5b4db0742e866f554705353fae6fd6d30984d33c18ade"
],
"_id":{
"$oid":"624094328dd6ff9ac420c84a"
}
},
{
"firstSource":"123456",
"lastSource":"",
"email":"",
"deviceIds":[
"8972892x2sa3e5b4db0742e866f554705353fae6fd6d31892hdwif"
],
"_id":{
"$oid":"6240952c4d246158b74bb239"
}
}
]
}
What I want to do is check whether there is a visitor with a certain deviceId. And if there is one I want to do nothing, but in case there isn't one I want to add a new visitor.
This is what I want to do in code:
// Find record based on ObjectID
const record = await UserRecord.findById(recordId);
// Check if the device id is already on the database within the record
if(record.visitors.deviceIds does not contain "certain deviceId") {
// Add a new visitor inside of the visitor array
record.visitors.deviceIds += "visitor with certain deviceId";
}
So basically I want to check whether a string inside of an array of an object that is inside of another array exists.
By using below query matched record would be returned which can be used to insert record if result is empty
var result = UserRecord.find({
"_id": recordId,
"visitors.deviceIds": {
"$elemMatch": {
"$in": deviceId
}
}
});