0

例子

我有两个集合,一个用于帖子,一个用于标签,如下所示:

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

Q1:我应该插入所有标签数据还是仅 ID 根据该 ID 从标签集合中获取更多详细信息?

Q2:如何将标签数组插入到帖子中?上面的代码不起作用,因为它需要一个对象

Q3实现集合之间的这种关系的最佳方式是什么?

4

2 回答 2

1

(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)
于 2016-01-14T10:37:00.420 回答
1

Q1:我应该插入所有标签数据还是仅 ID 根据该 ID 从标签集合中获取更多详细信息?

这取决于:标签是否改变?如果它是可变的,那么最好只存储 ID,以便按 ID 获取标签将始终返回正确的数据。否则,您需要使用新标签信息更新每个帖子。

Q2:如何将标签数组插入到帖子中?上面的代码不起作用,因为它需要一个对象

如果代码不起作用,则很可能您正在使用某种不匹配的模式:要插入数组代替对象,您需要修改模式以接受数组。您没有发布架构的详细信息。

Q3 实现集合之间的这种关系的最佳方式是什么?

您应该查看“非规范化”:这是在 MongoDB 等 NoSQL 数据库中用于此类事物的术语。没有直接的答案,这取决于关系 (1-1, 1-many, many-1) 和每个“many”的比率:在某些情况下,如果数据是不可变的,或者如果它们是不可变的,最好将数据嵌套到对象中。处理更新并不太痛苦。

这一系列博文应该可以帮助你更好地理解: http ://blog.mongodb.org/post/87200945828/6-rules-of-thumb-for-mongodb-schema-design-part-1

于 2016-01-14T18:34:18.160 回答