示例
我有两个集合,一个用于帖子,一个用于标签,如下所示:
Post {
"_id": "WZTEGgknysdfXcQBi",
"title": "ASD",
"labels": {},
"author": "TMviRL8otm3ZsddSt",
"createdAt": "2016-01-14T08:42:42.343Z",
"date": "2016-01-14T08:42:42.343Z"
}
Label {
"_id": "9NCNPGH8F5MWNzjkA",
"color": "#333",
"name": "Grey Label",
"author": "TMviRL8otm3ZsddSt"
}
我想要实现的是拥有多个标签的帖子。
问题是我无法将标签数据插入帖子中。 我有一个用于添加新帖子的模板,我在其中重复标签。然后在助手中,我检查选中了哪个标签并将其存储到一个数组中,但我无法将该数组插入到 Posts 集合中。
'submit .add-entry': function(event) {
var title = event.target.title.value;
var description = event.target.description.value;
var checkedLabels = $('.label-checkbox:checked');
//initiate empty array
var labelsArray = [];
//go over the checked labels
for(i = 0; i < checkedLabels.length; i++){
var label = checkedLabels[i].value;
// store ids into array
labelsArray.push(label)
};
Posts.insert({
title: title,
description: description,
labels: labelsArray
});
问题1:我应该插入所有标签数据还是仅根据该ID从标签集合中获取更多详细信息?
问题2:如何将标签数组插入到帖子中?上面的代码不起作用,因为它需要一个对象
Q3 在集合之间实现这种关系的最佳方式是什么?
最佳答案
(Q1)您可以将所有标签 ID 插入到该 labels
列表中并保持更新(Q3)我认为这是一个很好的做法;在您的开发过程中尝试使用此包的复合集合进行发布:https://github.com/englue/meteor-publish-composite
(Q2) 插入很容易:
Post.insert({title:'Abc', labels:['one', 'two']});
您需要使用 $addToSet
进行更新。下面是一个可能的方法的示例:
let setModifier = {
$addToSet: {
labels: myArrayOfLabelIDs
}
};
return Post.update({
_id: id
}, setModifier);
注意:切勿在客户端上使用插入(就像您所做的那样)。我的示例可以作为服务器上的方法添加(在其中使用 check()
),并且可以在提交时从客户端调用,如下所示:
Meteor.call('myMethod', id, labelsArray)
关于javascript - 在两个集合之间传递数据 - Meteor JS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34785473/