【问题标题】:Change mongoose schema viewModel更改猫鼬模式视图模型
【发布时间】:2017-09-23 01:33:38
【问题描述】:

我对 mongoose 中的相关架构有疑问: 我有 3 个架构:

var recipeProductSchema = new mongoose.Schema({
    product: { type: mongoose.Schema.Types.ObjectId, ref: 'Product' },
    productWeight: Number
}, {toJSON: {virtuals: true}});

var recipeSchema = new mongoose.Schema({
    name: String,
    products: [RecipeProduct]
})

var productSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true
    },
    weight: {
        type: Number,
        required: true
    },
    price: {
        type: Number,
        required: true
    }
})

当我想用我发送的产品创建配方时:

{
    "name": "Cake",
    "products": [
        {
            "product": "597a517b7c2e8508c8cc3f3a",
            "productWeight": 50
        }
    ]
}

但是当我得到有关食谱的详细信息时,我得到了这个:

{
    "_id": "597f7d0ce25d1413149aa30d",
    "name": "Cake",
    "products": [
        {
            "product": {
                "_id": "597a517b7c2e8508c8cc3f3a",
                "name": "Sugar",
                "weight": 400,
                "price": 40
            },
            "productWeight": 50,
            "_id": "597b825a61736b1adcb0ed0f",
            "productPrice": "5.00",
            "id": "597b825a61736b1adcb0ed0f"
        }
    ]
}

是否有可能使这两个json彼此相似? 因为在编辑配方视图中我不想在发送数据之前更改配方的产品对象;

我想发送这个 json:

{
    "name": "Cake",
    "products": [
        {
            "product": {
                "id": "597a517b7c2e8508c8cc3f3a" // or "_id"
            },
            "productWeight": 50
        }
    ]
}

我想得到:

{
    "_id": "597f7d0ce25d1413149aa30d",
    "name": "Cake",
    "products": [
        {
            "product": {
                "_id": "597a517b7c2e8508c8cc3f3a",
                "name": "Sugar",
                "weight": 400,
                "price": 40
            },
            "productWeight": 50,
            "_id": "597f7d0ce25d1413149aa30e",
            "productPrice": "5.00",
            "id": "597f7d0ce25d1413149aa30e"
        }
    ]
}

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    尝试建立子/父关系

    var recipeProductSchema = new mongoose.Schema({
        product: [productSchema],
        productWeight: Number
    }, {toJSON: {virtuals: true}});
    
    var recipeSchema = new mongoose.Schema({
        name: String,
        products: [recipeProductSchema]
    })
    
    var productSchema = new mongoose.Schema({
        name: {
            type: String,
            required: true
        },
        weight: {
            type: Number,
            required: true
        },
        price: {
            type: Number,
            required: true
        }
    })
    

    并在您的创建函数中执行$push

    您也可以在 get 函数中使用 mongoose populate

    【讨论】:

      猜你喜欢
      • 2012-12-26
      • 1970-01-01
      • 2016-08-05
      • 2013-02-11
      • 2015-10-21
      • 1970-01-01
      • 2017-10-05
      • 2013-06-23
      • 2021-12-25
      相关资源
      最近更新 更多