Подборка не создается по вызову

Итак, я запускаю сценарий следующим образом

const db = require("../config/database");
const mongoose = require("mongoose");
const UserSettings = require("../models/userSettings");
const Users = require("../models/users");

// code runs which connects to the db
// assume the models are set up fine and properly linked
Users.create({
    userName: account.userName
}, (error, user) => {
    if (error) {
        console.error(`Could not create user with error: ${user}`);
    }
    else {
        console.info(`User created ${user}`);
    }
    UserSettings.create({
        user: user
    }, (error, userSetting) => {
        if (error) {
            console.error(`UserSettings not created for ${user.userName} : ${error}`);
        }
        else {
            console.info(`settings! ${userSetting}`);
        }
    });
});

Я запускаю этот код, затем перехожу к своему терминалу и проверяю сам mongo, у меня создана только коллекция пользователей, а не коллекция usersSetting

Я просто запутался, потому что afaik, оба пользователя + userSettings настроены одинаково, поэтому я не уверен, почему коллекция userSetting не создается :(.

Заранее спасибо!

Обновлено: вот 2 схемы по запросу (немного обрезаны, чтобы легче было вписаться)

Users.js как моя модель

const mongoose = require("mongoose");
const bcrypt = require("bcrypt-nodejs");
const _ = require("lodash");

const generator = require("../security/generator");
const address = require("./address");

const Schema = mongoose.Schema;

const UsersSchema = new Schema({
    userName: {
        type: String,
        unique: true,
        trim: true,
        required: true
    },
    email: {
        type: String,
        trim: true,
        lowercase: true,
        unique: true,
        required: true,
        match: [/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/, "Please fill a valid email     address"]
    },
        password: {
        type: String,
        required: true
    }
});

UsersSchema.methods.isPasswordValid = function(password) {
    console.info("Comparing passwords");

    return bcrypt.compareSync(password, this.password);
};

UsersSchema.methods.toJSON = function() {
    let obj = this.toObject();
    delete obj.password;

    return obj;
};

UsersSchema.pre("save", function(next) {
    let user = this;

    console.info("----------");
    console.info(user);

    if (_.isEmpty(user) || !user.isModified("password")) {
        return next();
    }

    user.password = generator.salt(user.password);
    next();
});

const Users = mongoose.model("users", UsersSchema);
module.exports = Users;

UserSettings.js из моделей

const mongoose = require("mongoose");

const Schema = mongoose.Schema;

const UserSettingsSchema = new Schema({
    user: {
        type: Schema.Types.ObjectId,
        ref: "users",
        required: true,
        unique: true
    },
    useMetricMeasurements: {
        type: Boolean,
        default: false
    },
    locale: { //tan: make this a enum
        type: String,
        default: "en-US"
    }
});

UserSettingsSchema.pre("save",function(next){
    next();
});

const UserSettings = mongoose.model("userSettings", UserSettingsSchema);
module.exports = UserSettings;

Я немного обрезал оба файла, потому что полагал, что другие поля просто будут отвлекать.

Ваша консоль регистрирует что-нибудь, это оба вызова?

Graciano 01.04.2018 05:14

Можете выложить схему userSettings и user?

Sridhar 01.04.2018 10:59

Нет журналов консоли @Graciano

DanTan 02.04.2018 07:18

Я поместил урезанную версию схем @Sridhar, поля, которые я очищал, были настроены так же, как и другие поля, только в основном с другими именами.

DanTan 02.04.2018 07:28

@DanTan Ваш фрагмент кода отлично работает для меня, создавая документ в обеих коллекциях. Может проблема в каких-то других полях?

Sridhar 02.04.2018 09:58
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
39
1

Ответы 1

Я считаю, что ваша проблема в том, что Mongoose асинхронный. Таким образом, при вызове UserSettings.create () пользователь может не сохраняться. Попробуйте переместить код вставки сразу после

console.info(`User created ${user}`);

Я попытался поместить это в инструкцию else после этой строки. К сожалению, он отреагировал так же :(. Ни сообщений об ошибках консоли, ни каких-либо пользовательских настроек не было создано :(

DanTan 02.04.2018 07:22

Может быть, что-то связано с какой-то собственностью. Попробуйте установить пользователя только с установленным _id и запустите свой код.

Graciano 02.04.2018 15:36

Другие вопросы по теме