簡體   English   中英

MongoDB對象類型/嵌套模式

[英]MongoDB object type/nested schema

好的,所以我有一個帶有eventSchema的events.js文件:

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

}
});

以及一個帶有會場架構的會場.js:

var mongoose = require('mongoose');

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

我的問題是如何將事件模式中的“場地”字段鏈接到場地模式。 因此,基本上,當您創建一個新事件時,您只能從場所列表中添加一個場所。 提前致謝!

您可以按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鏈接到eventSchema中。

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
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM