Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb ObjectId条件引用集合的Mongoose模型设计_Mongodb_Mongoose_Mongoose Schema - Fatal编程技术网

Mongodb ObjectId条件引用集合的Mongoose模型设计

Mongodb ObjectId条件引用集合的Mongoose模型设计,mongodb,mongoose,mongoose-schema,Mongodb,Mongoose,Mongoose Schema,我很好奇,对于如何对这个场景建模的最佳解决方案是什么,在这个场景中,我有多个类型的实体,可以由单个属性引用。我认为,创建外键的方法是拥有ObjectId类型的属性和对适用模型的引用。因此,在我的场景中,我应该有一个字符串类型的属性,并且在其上有一个索引,并且省略引用吗 这里有一个抽象的例子来说明我的意思。。假设我有三种动物:狗、猫和猪。。然后说这些动物中的任何一只都可以去看兽医。所以我有一个VetVisit模式,它有一个可以引用狗、猫或猪的_id的petId。我的问题是。。我应该如何为petId

我很好奇,对于如何对这个场景建模的最佳解决方案是什么,在这个场景中,我有多个类型的实体,可以由单个属性引用。我认为,创建外键的方法是拥有ObjectId类型的属性和对适用模型的引用。因此,在我的场景中,我应该有一个字符串类型的属性,并且在其上有一个索引,并且省略引用吗

这里有一个抽象的例子来说明我的意思。。假设我有三种动物:狗、猫和猪。。然后说这些动物中的任何一只都可以去看兽医。所以我有一个VetVisit模式,它有一个可以引用狗、猫或猪的_id的petId。我的问题是。。我应该如何为petId建模?我做得对吗?请参阅下面的代码示例

狗:

类别:

清管器:

兽医探访:

var mongoose = require('mongoose');

var vetVisitSchema = new mongoose.Schema({
    petType: {
        type: String, // dog, cat, pig
        required: [true,"Pet type is required"]
    },
    petId: {
        type: String, 
        required: [true,"Pet ID is required"]
    },
    date: {
        type: Date,
        required: [true, "Date is required"]
    },
    Reason: {
        type: String,
        required: [true, "Reason is required"]
    }
});

module.exports = vetVisitSchema

你的兽医探访:我认为模式是正确的,但你可以把你的狗、猫、猪结合起来 集合在一个集合中,因为如果您有10只动物,您就有多只动物,不需要进行多个集合,您只需定义动物的大小,就可以根据动物的类型执行任何查询

    var mongoose = require('mongoose');

    var Animal= new mongoose.Schema({
        name: {type: String},
        petType: {
        type: String, // dog, cat, pig
            required: [true,"Pet type is required"],},
       isLongHair: {type:Boolean}
         isMuddy: {type:Boolean},
                age: {type: Number}
            });

        var Animal= mongoose.model('Animal', animalSchema);
        module.exports = Animal

哦,完全。。我只是举个例子。事实上,这些藏品完全不同。。不同到我不想把它们放在同一个系列里。否则我会同意你的看法。。你可以用我的例子做一个子类型超类型,它会工作的。现在我想起来了,也许我可以做一个超类型的子类型。谢谢你的反馈
var mongoose = require('mongoose');

var pigSchema = new mongoose.Schema({
    name: {type: String},
    isMuddy: {type:Boolean}
});

var Pig = mongoose.model('Pig', pigSchema);
module.exports = Pig
var mongoose = require('mongoose');

var vetVisitSchema = new mongoose.Schema({
    petType: {
        type: String, // dog, cat, pig
        required: [true,"Pet type is required"]
    },
    petId: {
        type: String, 
        required: [true,"Pet ID is required"]
    },
    date: {
        type: Date,
        required: [true, "Date is required"]
    },
    Reason: {
        type: String,
        required: [true, "Reason is required"]
    }
});

module.exports = vetVisitSchema
    var mongoose = require('mongoose');

    var Animal= new mongoose.Schema({
        name: {type: String},
        petType: {
        type: String, // dog, cat, pig
            required: [true,"Pet type is required"],},
       isLongHair: {type:Boolean}
         isMuddy: {type:Boolean},
                age: {type: Number}
            });

        var Animal= mongoose.model('Animal', animalSchema);
        module.exports = Animal