Home > database >  Unable to retrieve a document from Mongo (using mongoose) with a partial match
Unable to retrieve a document from Mongo (using mongoose) with a partial match

Time:04-12

I have a project in NodeJS (v16.14.0) in which I want to filter a list of documents. Most of the attributes are string and such they are easy to access yet, with the specialty (obj) attribute I am not able to get the info that I want:

{  
  "_id": {    
    "$oid": "--"  
  },  
  "name": "string",  
  "email": "string",  
  "password": "string",  
  "phoneNumber": "number",  
  "city": "string",  
  "myDescription": "string",  
  "specialty": {    
    "certified": ["plomero","electricista"],    
    "inProgress": ["albañil"],    
    "nonCertified": ["mecanico","veterinario"]  
  },  
  "image": {    
    "profile": [
        "string",
        "string"
    ],    
    "myJobs": [
        "string",
        "string"
    ]  
  },  
  "socialSecurity": {    
    "eps": "string",    
    "arl": "string"  
  },  
  "availability": {    
    "schedule": "string",    
    "fullAvailability": false  
  }
}

I want to use a string and return a list of documents that contain the given string in the certified attribute, for example:

db.collection.find({ specialty: { certified: { $in: ['plomero'] } } })
// return the document shown above

But I always get nothing. I have tried using $in and $elemMatch with no results. I can only retrieve the document as long as I copy the entire object:

db.collection.find({ specialty: { certified: ['plomero', 'electricista'], inProgress: ['albañil'], nonCertified: ['mecanico', 'veterinario'] } })

I have no clue on how to proceed, I have been reading MongoDB documentation but cannot find an example similar to this... Also I am quite new with Mongo.

Thanks for any guidance!

CodePudding user response:

use find

db.collection.find({
  "specialty.certified": "plomero"
})

mongoplayground

  • Related