Javascript sails-mongo:多对多关系在我的应用程序中不起作用。按照文档的说明仍然给出空数组
我在mongodb中使用sails js 以下是我的EventTags模型: EventTags.jsJavascript sails-mongo:多对多关系在我的应用程序中不起作用。按照文档的说明仍然给出空数组,javascript,node.js,mongodb,sails.js,sails-mongo,Javascript,Node.js,Mongodb,Sails.js,Sails Mongo,我在mongodb中使用sails js 以下是我的EventTags模型: EventTags.js module.exports = { schema: true, attributes: { eventList: { collection: 'Events', via:'tagList' }, event_tag_name:{ type:'
module.exports = {
schema: true,
attributes: {
eventList: {
collection: 'Events',
via:'tagList'
},
event_tag_name:{ type:'string',
required:true,
unique:true
}
}
};
以下是我的事件模型:
Events.js
module.exports = {
schema: true,
attributes: {
tagList: {
collection: 'EventTags',
via:'eventList'
},
title:{ type:'string',required: true},
blurb:{ type:'string'},
description:{ type:'string'},
venue: {type: 'string',required: true},
}
};
创建了EventTags,下面是我的json响应
{
"status": 109,
"status_message": "success..!!",
"event_tag_info": {
"event_tag_name": "travel1",
"createdAt": "2015-07-15T06:01:09.050Z",
"updatedAt": "2015-07-15T06:01:09.050Z",
"id": "55a5f725f7d707ba4f32ac74"
}
}
接下来,我复制了EventTags ID,即“ID”:“55a5f725f7d707ba4f32ac74”。
创建事件模型。
下面是事件模型Post数据
{
"tagList":"55a5f725f7d707ba4f32ac74",
"title": "Snow City : Bengaluru",
"blurb": "testtesttesttesttesttest",
"description": "Toronto has been chosene city",
"venue": "palace ground"
}
当我击中 我得到的是空的标记列表数组
[
{
tagList: [ ],
title: "Snow City ",
blurb: "some data",
description: "some data",
venue: "some address",
id: "55a5f98ef7d707ba4f32ac75"
}
]
请任何人帮我解决这个问题。多对多关系意味着Sails将自动创建联接表。因此,您需要将两个表中的数据相互关联 首先。在型号中,所有通孔名称均为小写: EventTags.js
module.exports = {
schema: false,
attributes: {
eventList: {
collection: 'Events',
via:'taglist'
},
event_tag_name:{
type:'string',
required:true,
unique:true
}
}
};
module.exports = {
schema: false,
attributes: {
tagList: {
collection: 'EventTags',
via:'eventlist'
},
title:{ type:'string',required: true},
blurb:{ type:'string'},
description:{ type:'string'},
venue: {type: 'string',required: true},
}
};
Events.js
module.exports = {
schema: false,
attributes: {
eventList: {
collection: 'Events',
via:'taglist'
},
event_tag_name:{
type:'string',
required:true,
unique:true
}
}
};
module.exports = {
schema: false,
attributes: {
tagList: {
collection: 'EventTags',
via:'eventlist'
},
title:{ type:'string',required: true},
blurb:{ type:'string'},
description:{ type:'string'},
venue: {type: 'string',required: true},
}
};
接下来,您需要关联数据,如:
Events.findOne({id: '55a5f98ef7d707ba4f32ac75'}).exec(function(err, event){
if (err) {
console.log(err);
} else {
event.tagList.add('55a5f725f7d707ba4f32ac74');
event.save(function(err, saved){
if (err) {
console.log(err);
} else {
console.log(saved);
}
});
}
});
您还可以使用Blueprint保存数据,如:
Events.findOne({id: '55a5f98ef7d707ba4f32ac75'}).exec(function(err, event){
if (err) {
console.log(err);
} else {
event.tagList.add('55a5f725f7d707ba4f32ac74');
event.save(function(err, saved){
if (err) {
console.log(err);
} else {
console.log(saved);
}
});
}
});
创建数据-发布/事件
{
tagList: [ '55a5f725f7d707ba4f32ac74' ],
title: "Snow City ",
blurb: "some data",
description: "some data",
venue: "some address",
}
更新数据-PUT/events/55a5f98ef7d707ba4f32ac75
{
tagList: [ '55a5f725f7d707ba4f32ac74' ],
title: "Snow City ",
blurb: "some data",
description: "some data",
venue: "some address",
}
相关的为了获取事件的标记列表,您需要填充
标记列表
属性
使用你可以点击的按钮
在控制器中,您将使用:
Event
.findOne('55a5f98ef7d707ba4f32ac75')
.populate('tagList')
.exec(...);
谢谢你的回答。我尝试了你的程序,它再次给我一个空列表作为“标记列表”。我尝试了与类别模型、文章模型和标记的多对多关系,它对类别、文章和标记很有效,当我包含事件模型时,它就不起作用了。是的。。我肯定是bulkin。我对我的其他型号(如类别、文章和标签)遵循了相同的程序,在那里工作正常。我对事件和标记遵循了相同的过程,但它不起作用。我尝试创建新的模型“EventTags”模型,并尝试了与“Events”模型的多对多关系,同样的问题标记列表[]。这意味着,代码中的某个地方出现了错误。如何将EventTag与事件关联?通过Blueprint API?我检查了我所有的代码,代码中没有任何错误,我纠正了我的错误,如上所示。我将事件标签和事件关联起来,如上图所示。我也尝试过了,但仍然不起作用。我有这样的关系——类别与文章有N对N的关系,反之亦然,文章与标记有N对N的关系,反之亦然。当我将N对N的关系与事件和标记包括在一起时,它显示了标记列表的空数组。