mcansado
mcansado

Reputation: 2164

Mongoose findOne() callback returning null

I'm trying to find a user in my node app with mongoose by using

var User = require('../app/models/user');

function mongoTest() {
    var publicAddress = "0x8a6be8979340faa30020b0c1f617d8fd4309679f";
    User.findOne({"publicAddress": publicAddress}, (err, user) => {
        if (err) {
            res.status(500).send(err)
        } else {
            console.log(user);
        }
    });
}

and err and user always return null. From other questions here (this and this), this usually seems to be related to mongoose pluralising collections. However, I don't think that's my issue because my users.js has

module.exports = mongoose.model('User', userSchema);
// Have also tried module.exports = mongoose.model('User', userSchema, 'User');

For completeness, users.js is

var mongoose = require('mongoose');
var bcrypt = require('bcrypt-nodejs');

// Define the schema for our user model
var userSchema = mongoose.Schema({
    local: {
        username: String,
        password: String,
        pictureCaption: String,
        publicAddress: String,
        contractAddress: String
    }
});

Finally, I'm sure that public address exists because I can see it in the mongoDB with Robo 3T.

Upvotes: 1

Views: 6645

Answers (1)

Anurag Singh Bisht
Anurag Singh Bisht

Reputation: 2753

In your userSchema the publicAddress is part of local object.

var userSchema = mongoose.Schema({
    local: {
        username: String,
        password: String,
        pictureCaption: String,
        publicAddress: String,
        contractAddress: String
    }
});

You are trying to find an object with publicAddress but it's actually inside the local object. So you should edit the query as follows to get the result.

User.findOne({"local.publicAddress": publicAddress}, (err, user) => {
        if (err) {
            res.status(500).send(err)
        } else {
            console.log(user);
        }
    });

Upvotes: 3

Related Questions