Raj
Raj

Reputation: 499

what is the Mongoose find query using nodejs?

This is my players model

var mongoose = require('mongoose'),Schema = mongoose.Schema;  
var playerSchema = Schema({  
  name: String,
  password: String,
  country: String
});
mongoose.model('players', playerSchema);

This is my countries model

var mongoose = require('mongoose'),Schema = mongoose.Schema;  
var countrySchema = Schema({  
  name: String,
  isActive: Boolean
});
mongoose.model('countries', countrySchema);

And this is app.js

mongoose.model('players').find({}, function (err, players) {
            console.log(players);
              if (err) {
                  return console.error(err);
              } else {
                  res.format({
                      html: function(){
                        res.render('players/index', {
                              title: 'Players List',
                              "players" : players
                          });
                    },
                    json: function(){
                        res.json(players);
                    }
                });
              }
        });

In players model I have countryId and in countries model I have corresponding countryName. Now I want to find players with country name with same find() query.

Upvotes: 1

Views: 1186

Answers (2)

chirag
chirag

Reputation: 1779

you can use mongoose populate method

refer this link: mongoose populate

in your example, it something like this:

mongoose.model('players').find().populate('country').exec(function(err,players){

});

this will give you result of both countryID and Name

Upvotes: 2

japrescott
japrescott

Reputation: 5023

mongodb is nosql-database, not a relational database like mysql/postgre. So modelling your data is not like relationaldatabses where you can make one query that joins two tables (in mongodb, "tables" are called collections).

In MongoDB and your current Schema you will first need to find the countryId of the country you want. And then find the players that have that country.

Alternatives;

  1. you can store the countryName directly on the player collection
  2. you can store the playerId's in an array within the the country collection

further more, in your playerSchema, country should be a ObjectId, not a String.

Upvotes: 0

Related Questions