请教一个关于mongodb的Nodejs模型骨架

请教一个关于mongodb的Nodejs模型骨架

我想设计一个用户,有 name password 等,关键是 这个帐号有个背包,背包中有目前想是 物品,物品数量,比如 石头 3个 ;苹果 5个; 水瓶 1个;关键是有什么东西不是确定的,当然有上限,大概50项,某个物品的上限不考虑, 各位大侠 这该如何设计好呢

13 回复

好的,我们可以基于MongoDB和Node.js来设计一个用户模型,该模型包括用户的姓名、密码以及一个动态的背包系统。背包中的物品及其数量可以动态添加和删除。

设计思路

  1. 用户模型:定义用户的基本信息(如 namepassword)。
  2. 背包模型:背包是一个对象,其中每个属性代表一种物品,属性值为该物品的数量。

示例代码

首先,我们需要安装 mongoose 库来帮助我们定义和操作 MongoDB 模型:

npm install mongoose

接下来,我们可以定义用户模型:

const mongoose = require('mongoose');

// 连接MongoDB数据库
mongoose.connect('mongodb://localhost:27017/mydatabase', { useNewUrlParser: true, useUnifiedTopology: true });

// 定义物品模型
const itemSchema = new mongoose.Schema({
    name: String,
    quantity: Number
});

// 定义用户模型
const userSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true
    },
    password: {
        type: String,
        required: true
    },
    backpack: [itemSchema]
});

// 创建模型
const User = mongoose.model('User', userSchema);

module.exports = User;

使用示例

现在我们可以在其他文件中使用这个用户模型了。例如,创建一个新用户并为其添加一些物品到背包中:

const User = require('./models/User');

async function createUser() {
    try {
        // 创建新用户
        const newUser = new User({
            name: 'Alice',
            password: 'mypassword',
            backpack: [
                { name: '石头', quantity: 3 },
                { name: '苹果', quantity: 5 },
                { name: '水瓶', quantity: 1 }
            ]
        });

        // 保存用户到数据库
        await newUser.save();
        console.log('用户已成功创建');
    } catch (error) {
        console.error(error);
    }
}

createUser();

解释

  • itemSchema:定义了物品的结构,包括 namequantity
  • userSchema:定义了用户的结构,包括 namepasswordbackpack(一个数组,其中每个元素都是一个物品)。
  • User 模型:通过 mongoose.model 方法创建了一个新的模型,用于与数据库交互。

这样,你就可以动态地添加或修改用户背包中的物品了。例如,你可以通过查询用户并更新其背包来实现这一点。


卡了,多点了两次, 我用的是 mongoose

简单,放数组里

user:{ username:xxx, password:xxx, good :[ {apple:2}, {stone:5} ] }

好的 谢谢呀

好的 谢谢呀

好的 谢谢呀

好的 谢谢呀

好的 谢谢呀

好的 谢谢呀

今天网络有点问题 重复了上面的回复

user:{ username:xxx, password:xxx, good :[ {apple:2}, {stone:5}, {stone:5}, {stone:5}, {stone:5}, {stone:5}, {stone:5}, {stone:5}, {stone:5}, {stone:5}, {stone:5}, {stone:5}, {stone:5}, {stone:5}, {stone:5}, {stone:5}, {stone:5} . . . . . . . . . . . . . ] }

应该是一次把50个都给填上

为了设计一个具有不确定物品数量的用户模型,可以使用MongoDB中的嵌套文档来表示用户的背包及其包含的物品。以下是具体的设计方案和示例代码。

设计方案

  1. 用户模型:包括基本字段(如 namepassword)以及一个嵌套文档 inventory 来表示用户的背包。
  2. 背包模型:背包中每个物品由其名称和数量组成。

示例代码

首先,确保你已经安装了 mongoose,这是一个用于MongoDB对象建模的库:

npm install mongoose

然后,你可以创建一个简单的用户模型:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

// 定义背包物品的Schema
const ItemSchema = new Schema({
    name: { type: String, required: true },
    quantity: { type: Number, default: 0 }
});

// 定义用户Schema
const UserSchema = new Schema({
    name: { type: String, required: true },
    password: { type: String, required: true },
    inventory: [ItemSchema] // 使用数组存储多个物品
});

// 创建模型
const User = mongoose.model('User', UserSchema);

module.exports = User;

示例操作

接下来,我们可以在应用中添加一些数据或查询数据:

const User = require('./models/User'); // 假设你的模型文件路径为 ./models/User.js

// 创建新用户
const newUser = new User({
    name: 'Alice',
    password: 'secret'
});

newUser.inventory.push({ name: '石头', quantity: 3 });
newUser.inventory.push({ name: '苹果', quantity: 5 });
newUser.inventory.push({ name: '水瓶', quantity: 1 });

newUser.save()
    .then(() => console.log('用户已保存'))
    .catch(err => console.error('保存失败:', err));

// 查询用户
User.findOne({ name: 'Alice' })
    .then(user => {
        if (user) {
            console.log('用户找到:', user);
        } else {
            console.log('未找到用户');
        }
    })
    .catch(err => console.error('查询失败:', err));

以上就是如何使用Mongoose定义一个具有动态背包物品数量的用户模型,并进行基本的CRUD操作。

回到顶部