Javascript MongoDB对象类型/嵌套模式
好的,我有一个events.js文件和一个eventSchema: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') 我的问题是如何将事件模式中的“场馆”字段链接到场馆模式。因此,在创建新活动时,基本上只能从场馆列表中添加一个场馆。提前谢谢 您可
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
});