Using Mongoose to query an array of objects

Viewed 43

I've got a MongoDB database collection called Dealers structured a bit like this:

{
 ... dealer info goes here like address etc,
"user_logins": [
               {
                  "Username": "something",
                  ... other stuff
               }
               ]
},{
... next dealer etc...

I'm using Mongoose to try and query on the user_logins.Username using this:

Mongoose model

const myTest = mongoose.Schema({
      Username: {
          type: "String",
          required: true
          }
      }, { collection: "Dealers" })
module.exports = mongoose.model("Dealer", myTest);

The query

Dealer.find({'user_logins.Username' : 'something'}, (err, result) => {
    if (err) {
            console.log(err);
    } else {
            res.json(result);
    }
});        

All the Username's are distinct. But instead of returning the one matching document, it seems to be returning the whole Dealers collection.

I followed this example.

https://kb.objectrocket.com/mongo-db/use-mongoose-to-find-in-an-array-of-objects-1206

What am I doing wrong please?

Thanks.

EDIT: It seems fine if I try to find something on the root level. EG. Company name, address etc. But if I try to query an imbedded array of objects, that's when it pulls the whole collection. I don't get it.

1 Answers

Found the answer. My model was wrong. It needed to reflect the actual structure of my data, which does kind of make sense.

This worked:

const myTest = mongoose.Schema({
  user_logins: [{
     Username: {
      type: "String",
      required: true
      }
  }]
}, { collection: "Dealers" })
module.exports = mongoose.model("Dealer", myTest); 
Related