Munchkin
Munchkin

Reputation: 1085

Mongoose fetch all key values from a collection and put into an array

How do I fetch all keys named 'username' and 'username' with 'password'(password hash) into two separate arrays? What I've tried so far:

const mongoose = require('mongoose');
const User = require('./models/user.js');
// doesn't work!
const users = User.find().byName('username');
console.log(users);

My user.js:

const mongoose = require('mongoose');

const userSchema = mongoose.Schema({

    loginId: String,
    firstname: String,
    lastname: String,
    eMail: String,
    password: String,
    active: Boolean

});
module.exports = mongoose.model("User", userSchema);

Update: Desired output: Array of users:

['bert', 'joe', 'john']

Array of users with passwords:

[ 'bert', 'bertpassword', 'joe', 'joespassword', 'john', 'johnspassword']

P.S Yes, this is a login system.


Dummy user entry:

{
    _id: "5dc16a477bfe45097018a074",
    loginId: "1",
    firstname: "Test",
    lastname: "Testeroni",
    eMail: "[email protected]",
    password: "test",
    active: "true"
}

Upvotes: 1

Views: 543

Answers (1)

Moustafa Elkady
Moustafa Elkady

Reputation: 670

use Lodash flatten at the result

npm i lodash --save

then

const mongoose = require("mongoose");
const _ = require("lodash");

const User = mongoose.model(
    "user",
    new mongoose.Schema({
        loginId: String,
        firstname: String,
        lastname: String,
        eMail: String,
        password: String,
        active: Boolean
      })
  );

const db = mongoose.connection;

mongoose.connect("mongodb://localhost:27017/dbName", {
  useNewUrlParser: true
});

db.once("open", () => {
  User.find({}, { firstname: 1, password: 1 }, function(err, users) {
    const flattenUsers = _(users)
      .map(({ firstname, password }) => [firstname, password])
      .flatten()
      .value();
    console.log(flattenUsers);
  });
});

Upvotes: 2

Related Questions