Mongodb mongoose节点js模式关系

Posted

技术标签:

【中文标题】Mongodb mongoose节点js模式关系【英文标题】:Mongodb mongoose node js schema relation 【发布时间】:2018-07-04 19:43:03 【问题描述】:

你好,我是 mongodb 和 node js 的新手,我有一个问题

这是我的产品架构

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

const categorySchema = require('./category');

const ProductSchema = new Schema(
    country: 
        type: String,
        required: [true, "country can't be null"]
    ,
    city: 
        type: String,
        default: ""
    ,
    name: 
        type: String,
        required: [true, "name can't be null"]
    ,
    measureValue: 
        type: Number,
        default: 0
    ,
    minPrice: 
        type:Number,
        required: [true, "minPrice can't be null"],
        min: [1,"minPrice must be at least 1"]
    ,
    maxPrice: 
        type:Number,
        required: [true, "maxPrice can't be null"],
        min: [1,"maxPrice must be at least 1"]
    ,
    photoUrl: 
        type:String,
        default: ""
    ,
    explanation: 
        type: String,
        default: ""
    ,
    category: [categorySchema.schema],
    userID: 
        type: String,
        required: [true,"userid cant be null"]
    ,
    isActive: 
        type: Boolean,
        default: true
    ,
    createdDate: 
        type: Date,
        default: Date.now
    ,
    deletedDate: 
        type:Date
    
)

这是我的类别架构

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

const CategorySchema = new Schema(
 name: 
        type: String,
        required: [true, "name can't be null"]
    ,
    createdDate: 
        type: Date,
        default: Date.now
    ,
    deletedDate: 
        type:Date
    
)

我需要这样做; 每个产品数据都必须有类别

如果有一天,某个类别的名称发生了变化,那么与该类别相关的每个产品都必须更改

我正在尝试将类别 ID 设置为产品架构,当我获取数据时,它必须来自每个类别名称为 json 的产品

如果你能帮助我,我真的很困惑,我真的很感激

【问题讨论】:

【参考方案1】:

您可以将您的类别设置为:

category: 
        type: mongoose.Schema.Types.ObjectId,
        ref: 'category' //your model name
    

如果您想要多个类别,可以将其包装成一个数组并将其命名为类别。

然后,当您获取数据时,您将不得不执行new Product().populate('category') 来获取类别数据,而不是仅返回类别 ObjectId。

【讨论】:

当我插入一个新产品时,我应该发送类别 ID 或类别型号吗? 我想发送类别 id 这种方式可以吗? 是的,你可以只发送 id ProductModel.find().populate('Categories').exec(function(err,data) res.send(Result: data) ) 我使用了这个方法但返回数据就像这样“city”:“”,“measureValue”:0,“photoUrl”:“”,“explanation”:“”,“isActive”:true,“createdDate”:“2018-01-25T14:45: 35.582Z”、“_id”:“5a69ed8f3151bd15b46920fc”、“名称”:“面包”、“minPrice”:4、“类别”:“5a69b854ca974d40ccc4b62d”、“__v”:0 它只返回类别 id 而不是类别模型

以上是关于Mongodb mongoose节点js模式关系的主要内容,如果未能解决你的问题,请参考以下文章

mongoose模式的类型有错误

带有 Node Js 的 Mongodb

在节点 js 中使用 mongoose 连接到 MongoDB 后未显示数据

[转] mongoDB与mongoose

MongoDB/Mongoose:多对多关系

MongoDB / Mongoose 一对多关系