MongoDB 无法将 $addToSet 应用于 Meteor JS 中的非数组
MongoDB Cannot apply $addToSet to non-array in Meteor JS
我想创建一个用户数组,这些用户已投票 post,以允许他们每个 post 只投票一次。我想将投票的用户添加到数组中,以拒绝他们多次点击。但是当我尝试 $addToSet 到数组时,我得到 MongoDB cannot apply $addToSet modifier to non-array.
'click a.yes': function(event) {
if (Meteor.user()) {
event.preventDefault();
var postId = Session.get('selected_post');
Posts.update(postId, {$addToSet: {users: Meteor.user()}});
Posts.update(postId, {$inc: {'score' : 1}});
这是 post 的结构,其中包含用户数组
Template.postSubmit.events({
'submit form': function(e) {
e.preventDefault();
var post = {
yak: $(e.target).find('[name=yak]').val(),
submitted: new Date(),
score: 0,
users: ({})
};
post._id = Posts.insert(post);
Router.go('postsList', post);
}
});
您应该已经查看了您创建的文档。这不是您在 JSON 表示法中标记用于序列化的空数组的方式。你应该做的:
var post = {
yak: $(e.target).find('[name=yak]').val(),
submitted: new Date(),
score: 0,
users: []
};
因为现在,您的 "users" 字段如下所示:
"users" : { }
或者可能更好,但甚至根本不初始化字段,$addToSet
会为您处理并在有新内容要添加时创建元素。
像 MongoDB 这样的无模式数据存储通常不需要你像这样进行预初始化。
我想创建一个用户数组,这些用户已投票 post,以允许他们每个 post 只投票一次。我想将投票的用户添加到数组中,以拒绝他们多次点击。但是当我尝试 $addToSet 到数组时,我得到 MongoDB cannot apply $addToSet modifier to non-array.
'click a.yes': function(event) {
if (Meteor.user()) {
event.preventDefault();
var postId = Session.get('selected_post');
Posts.update(postId, {$addToSet: {users: Meteor.user()}});
Posts.update(postId, {$inc: {'score' : 1}});
这是 post 的结构,其中包含用户数组
Template.postSubmit.events({
'submit form': function(e) {
e.preventDefault();
var post = {
yak: $(e.target).find('[name=yak]').val(),
submitted: new Date(),
score: 0,
users: ({})
};
post._id = Posts.insert(post);
Router.go('postsList', post);
}
});
您应该已经查看了您创建的文档。这不是您在 JSON 表示法中标记用于序列化的空数组的方式。你应该做的:
var post = {
yak: $(e.target).find('[name=yak]').val(),
submitted: new Date(),
score: 0,
users: []
};
因为现在,您的 "users" 字段如下所示:
"users" : { }
或者可能更好,但甚至根本不初始化字段,$addToSet
会为您处理并在有新内容要添加时创建元素。
像 MongoDB 这样的无模式数据存储通常不需要你像这样进行预初始化。