如何使用 NextJS 为 Mongoose 创建子文档模式/调用

问题描述 投票:0回答:1

我想保存 1 个文档,其中包含多个子文档。在本例中,文档名为“Scores”,子文档包含“Player: x, Score: y”。我正在使用 mongoose 和 nextjs

这是我的架构:

import { Schema, model, models } from "mongoose";

const ScoreSchema = new Schema({
    creator: {
        type: Schema.Types.ObjectId,
        ref: 'User',
    },

    scores_to_save: [
        {
            player: { type: String },
            score: { type: String }
        }
    ]
});

const Score = models.Score || model( 'Score', ScoreSchema );

export default Score;

这是我的 API 路由器:

import { connectToDB } from "@utils/database";
import Score from "@models/score";

export const POST = async ( req ) => {
    const { userId, scores } = await req.json();
    
    try {
        await connectToDB();

        const newScores = new Score({
            creator: userId
        });

        // Manually data insert for now, just for testing
        newScores.scores_to_save = [
            { player: 'my name', score: '5' },
            { player: 'your name', score: '6' }
          ];

        console.log('TO SAVE Document: ', newScores );

        await newScores.save();

        return new Response( JSON.stringify( newScores ), { status: 201 } );
    } catch (error) {
        return new Response( "Failed to create a new Scores.", { status: 500 } );
    }
}

console.log('要保存文档:', newScores );回报:

TO SAVE Document:  {
  creator: new ObjectId("652af415729e8d8a59b2202f"),
  _id: new ObjectId("6532cfcd4c76ca7d258d3f0d")
}

完全忽略“newScores.scores_to_save”部分。

我根本没有收到任何错误,但保存到数据库中的唯一内容是“creator”和“_id”值,

我缺少什么?

提前致谢!

mongoose next.js schema
1个回答
0
投票

好吧,我终于弄清楚问题出在哪里了。看起来模型架构的结构发生任何更改后,我们需要重新启动本地服务器。

所以,我只需关闭终端,再次打开它并运行

npm run dev

之后,一切都按预期开始工作。

console.log('TO SAVE Document: ', newScores );
现在返回:

TO SAVE B:  {
  creator: new ObjectId("652af415729e8d8a59b2202f"),
  _id: new ObjectId("6533cd6cfbefe01889fd22e7"),
  scores_to_save: [
    {
      player: '652f36c9f6ad40c3aedf0cdf',
      score: '777',
      _id: new ObjectId("6533cd6cfbefe01889fd22e8")
    },
    {
      player: '652f3470729e8d8a59b221dd',
      score: '666',
      _id: new ObjectId("6533cd6cfbefe01889fd22e9")
    }
  ]
}

请注意,我现在也在传递真实数据。

谢谢大家!

© www.soinside.com 2019 - 2024. All rights reserved.