【问题标题】:Manage duplicate subdocuments in mongoDB using mongoose使用 mongoose 管理 mongoDB 中的重复子文档
【发布时间】:2021-05-11 23:44:32
【问题描述】:

有 2 个模型。

  1. 用户
  2. 植物

最终用户应该能够添加多个数量的同一植物。 我的用户模型是:

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

const userSchema = new Schema({
    email: {
        type: String,
        required: true,
    },
    cart: [{
        type: Schema.Types.ObjectId,
        ref: 'Plants',
    }
    ],
    address: [{
        type: Schema.Types.ObjectId,
        ref: 'Contacts'
    }]
});


module.exports = mongoose.model('Users', userSchema)

我的植物模型是

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

const plantSchema = new Schema({
    name: {
        type: String,
        required: true,
    },
    imageUrl: {
        type: String,
        required: true,
    },
    description: {
        type: String,
        required: true,
    },
    price: {
        type: Number,
        required: true
    },
    category: {
        type: String,
        required: true,
    }
});

module.exports = mongoose.model('Plants', plantSchema)

希望我的用户包含多个重复的植物子文档。

0:6013ab17e5d05b3457cf983a
1:6017ce139e9f3d6d3a616f2b
2:6017ce139e9f3d6d3a616f2b
3:6017ce139e9f3d6d3a616f2b
4:6017ce139e9f3d6d3a616f2b
5:6017ce139e9f3d6d3a616f2b

我应该如何管理这个

【问题讨论】:

    标签: javascript node.js reactjs mongodb mongoose


    【解决方案1】:

    每个子文档都有自己的 _id,当您将 Plants 文档推送到用户文档时会自动生成该 _id。这意味着,当您列出用户文档时,会出现 2 个具有不同 _id 的相同植物。尝试使用

    const result = await User.find({}).populate('cart');
    

    这将填充您的购物车并向您显示已作为子文档推送到您的用户文档的植物

    【讨论】:

      【解决方案2】:

      使用mongoose.Document的填充功能

      const doc = await User.findById(id).populate('cart');
      

      您可以选择填充文档中的多个字段;

      const docs = await User.findById(id).populate('cart').populate('address');
      

      使用此链接阅读更多内容 Mongoose populate document

      【讨论】:

        猜你喜欢
        • 2015-05-25
        • 1970-01-01
        • 2013-09-04
        • 2019-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多