MongoDB заполнить, возвращая null - PullRequest
0 голосов
/ 04 августа 2020

Я пытаюсь заполнить свою пользовательскую схему элементами, но по какой-то причине она ничего не заполняет в пользовательской схеме. Может кто-нибудь взглянуть. У меня есть 1 пользователь и 1 элемент, принадлежащие этому пользователю в моей базе данных, но ничего не заполняется, и я продолжаю видеть null.

User Schema

var mongoose = require('mongoose')

var userSchema = mongoose.Schema({
    name: {
        type: String,
        required: true
    },
    discordID: {
        type: String,
        required: true
    },
    discordImage: {
        type: String,
        required: true
    },
    items: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Item'
    }]
})

const User = module.exports = mongoose.model('User', userSchema)

Item Schema

var mongoose = require("mongoose")

var itemSchema = mongoose.Schema({
    name: {
        type: String,
        required: true
    },
    purchasedPrice: {
        type: Number,
        required: true
    },
    purchasedDate: {
        type: String,
        required: true
    },
    author: {
        type: mongoose.Schema.Types.ObjectId,
        required: true,
        ref: "User"
    }
})

const Item = module.exports = mongoose.model("Item", itemSchema)

Заполнить код

app.get("/inventory", async (req, res) => {
    try {
        await req.user.populate({
            path: 'items'
        }).execPopulate()
        console.log(req.user)
    } catch (error) {
        console.log(error)
    }
    res.status(200).render("inventory.ejs", { currentUser: req.user })
})

Объекты в БД:

Элемент:

enter image description here

User:

введите описание изображения здесь

Ответы [ 2 ]

0 голосов
/ 09 августа 2020

Используется виртуальный метод в пользовательской схеме для создания ассоциации

userSchema.virtual("items", {
    ref: "Item",
    localField: "_id",
    foreignField: "author"
})

Работает нормально с исходным кодом

0 голосов
/ 04 августа 2020

Я продолжаю видеть null.

и

нет, это просто пусто

подсказывает, что элементы не добавлены ваш пользователь. Вам необходимо иметь несколько идентификаторов, которые вы можете заполнить.

Все, что нужно заполнить, - это преобразовать ObjectID в документ. Нет magi c, который будет синхронизировать c itemSchema.author с userSchema.items.

Следовательно, недостаточно добавить автора к элементу. Вам также необходимо добавить элемент автору.

Так, например, вы можете добавить такой элемент:

const item = new Item({author: user._id});
await item.save();
req.user.items.push( item );
await req.user.save();

Теперь, когда вы регистрируете req.user, есть ли какие-либо элементы там?

Как только вы увидите objectIds, вы можете go обратно и добавить этот .populate('items') в микс, и я обещаю вам, что это сработает.

...