Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/389.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
Javascript MongoDB对象类型/嵌套模式_Javascript_Node.js_Mongodb - Fatal编程技术网

Javascript MongoDB对象类型/嵌套模式

Javascript MongoDB对象类型/嵌套模式,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,好的,我有一个events.js文件和一个eventSchema: var eventSchema = mongoose.Schema({ name:{ type: String, //required: true venue:{ } }); 以及一个带有场馆架构的venue.js: var mongoose=require('mongoose') 我的问题是如何将事件模式中的“场馆”字段链接到场馆模式。因此,在创建新活动时,基本上只能从场馆列表中添加一个场馆。提前谢谢 您可

好的,我有一个events.js文件和一个eventSchema:

var eventSchema = mongoose.Schema({
name:{
    type: String,
    //required: true
venue:{

}
});
以及一个带有场馆架构的venue.js:

var mongoose=require('mongoose')

我的问题是如何将事件模式中的“场馆”字段链接到场馆模式。因此,在创建新活动时,基本上只能从场馆列表中添加一个场馆。提前谢谢

您可以通过id链接它。 您不必在事件模式中添加所有“地点”字段

var eventSchema = mongoose.Schema({
  name:{
    type: String,
    //required: true
  },
  venue_id: Schema.Types.ObjectId,
});
因为你用的是猫鼬,所以你可以像

venue_id: { type: Schema.Types.ObjectId, ref: 'Venue' }
它使用的是方法

填充是将文档中的指定路径(即场馆id)自动替换为其他集合中的文档(即与场馆id匹配的文档)的过程

你可以像这样使用它

event.
  findOne({ name: 'somename' }).
  populate('venue').
  exec(function (err, event) {
    if (err) return handleError(err);
});

它将返回带有与场馆id匹配的场馆文档的活动文档,而不仅仅是场馆id。

由@godsnam给出的答案是正确的,但是当您希望在模式中使用引用时。如果您不想使用引用,那么这可能会对您有所帮助

您可以在eventSchema中链接您的venueSchema,只需编写如下内容

var venueSchema = mongoose.Schema(
    {
        name: {
            type: String,
            //required: true
        },
        postcode: {
            type: String,
            //required: true
        },
        town: {
            type: String,
            //required: true
        }
    });

var eventSchema = mongoose.Schema({
    name: {
        type: String,
        //required: true
    },
    venue: venueSchema
});

也许这会有帮助这是正确的语法吗?地点:{vention\u id:{type:Schema.Types.ObjectId}}地点:{vention\u id:{type:Schema.Types.ObjectId}语法不正确。您要做的是参考场馆模式。您可以将保存场馆集合id的场馆id字段设置为“我的答案”。或者,如果你想做得更具体一些,可以创建像venue_id:{{type:mongoose.Schema.Types.ObjectId,ref:'venue'}这样的字段。你能解释一下填充方法是如何工作的吗?我应该如何在这个例子中使用它。谢谢!!谢谢。这与POST请求有关,也就是说,我可以简单地做POST:{“name”:“eventName”,{Venure:“场馆id”}它将返回场馆?干杯!你是想插入文档吗?你不必将场馆字段用括号括起来。只要{name:“eventName”,场馆id:“场馆id}如果venueSchema在另一个文件(在同一文件夹中)中,我该怎么做?你可以做require(schemaPath);好的,我已经做了:场馆=require('./场馆');在events.js文件中,然后在eventSchema中,我添加了:地点:venueSchema,但在终端中我得到了引用错误:venueSchema未定义:/Do venueSchema=require()。而在venueSchema文件do module.exports中=你的venueSchemaThanks很多!这似乎很有效!尽管你知道为什么当我在活动中发出GET请求时,场馆名称变得非常奇怪,比如:“0:“0”,“1:“2”,“2:”,“3:“a”,“4:“c”,“5:“a”,“6:“d”,“7:“e”,“8:“m”,“9:“y”,当我在场地上发出GET请求时,它只会显示名称:02academy
var venueSchema = mongoose.Schema(
    {
        name: {
            type: String,
            //required: true
        },
        postcode: {
            type: String,
            //required: true
        },
        town: {
            type: String,
            //required: true
        }
    });

var eventSchema = mongoose.Schema({
    name: {
        type: String,
        //required: true
    },
    venue: venueSchema
});