【问题标题】:How Should I Store Data In SubSchemas in MongoDB and Node JS?我应该如何在 MongoDB 和 Node JS 的子模式中存储数据?
【发布时间】:2021-02-27 17:46:11
【问题描述】:

在 MongoDB 中,您通过编写模式来存储数据,并通过一些路由来执行所有操作。我的问题是我应该如何存储用户数据。像这样的:

const Page = new mongoose.Schema({
    username: String
    Password: String
    lists: [{
        list_name: String,
        etc.
    }]
});

这是我想要这样做的方式,因为没有其他人能够访问其他人的列表。我的问题是假设他们更新了某个 list_name 我将如何仅更新该某个 list_name 而不是更新所有内容。我对 MongoDB 有点陌生,所以任何帮助都将不胜感激。

【问题讨论】:

标签: node.js database mongodb


【解决方案1】:

do thaun 通过将我链接到文档来帮助我。在查看文档后,我发现了一堆我没有使用的东西。话虽如此,这里是我最终使用的 Schama。

const Task = new mongoose.Schema({
    text: {type: String, required: true}
})

const Page = new mongoose.Schema({
    list_name : {type: String, unique: true},
    task: [Task]
});

为了访问帖子的任务架构,我这样做了。

router.post('/lists/:list', async (req, res) => {
    try {
        console.log(await Question.findOne({_id: req.params.list}))
        const question = await Question.findOneAndUpdate({"_id": req.params.list}, {"$push": {task:{"text": req.body.text}}}, {new:true})

        if (!question)
            return res.status(404).json({})
        else
            return res.status(200).json(question)
            
    } catch (error) {
        return res.status(500).json({"error":error})
    }
})

get 有点棘手,因为我找不到使用 findOne,所以我使用了 for 循环。这是获取的代码。

router.get('/lists/:list/:task', async (req, res) => {
    try {
        const _list = req.params.list 
        const _task = req.params.task
        console.log(_task)
        const question = await Question.findOne({_id: _list})
        for (let index = 0; index < question.task.length; index++) {
            if(req.params.task = question.task[index]._id)
                return res.status(200).json(question.task[index])
        }
        return res.status(404).json({})
    } catch (error) {
        return res.status(500).json({"error":error})
    }
})

我希望这对某人有所帮助,因为获取此信息有点烦人。干杯!

【讨论】:

    猜你喜欢
    • 2013-07-04
    • 2017-10-07
    • 2011-10-02
    • 2017-08-06
    • 2013-09-15
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    • 2017-11-15
    相关资源
    最近更新 更多