我将归档和shema定义为:
storageArticles:
{
type: Array,
autoValue: function() {
return [];
},
label: 'Articless added to storage.',
},
'storageArticles.$': {
type: String
}
当我尝试使用(在服务器端方法中)更新此字段时:
Storages.update(storageId , {$set: { "storageArticles" : articleId }});
一切正常,但是没有将数据添加到数组。
能给我一些指导来解决这个问题吗?
编辑
编辑为此问题添加了更多详细信息,也许这是我的错误。
'articles.articleAddToStorage': function articleAddToStorage(storageId,articleId) {
check(storageId, String);
check(articleId, String);
try {
Articles.update(articleId, { $set: {articleAssignedToStorage:true}});
Storages.update(storageId , {$addToSet: { "storageArticles" : articleId }});
} catch (exception) {
handleMethodException(exception);
}
}
handleAddToStorage()
{
const articleId = this.props.articleId;
const storageId = this.state.storageId;
const history = this.props.history;
if(storageId!="")
{
Meteor.call('articles.articleAddToStorage', storageId,articleId, (error) => {
if (error) {
Bert.alert(error.reason, 'danger');
} else {
Bert.alert("Article assigned to storage", 'success');
}
});
}
else {
Bert.alert("Plese select storage", 'warning');
}
}
答案 0 :(得分:3)
一行
Storages.update(storageId , {$set: { "storageArticles" : articleId }});
基本上,您尝试将字符串值(articleId)set到定义为字符串数组的字段中。
仅当您将值数组设置为storageArticles
(从而覆盖整个字段)时,这才有意义:
Storages.update(storageId , {$set: { "storageArticles" : [articleId] }});
如果要推入或拉出值,可以寻找mongo array update operators(在此处列出一些示例):
$ addToSet仅在元素不存在时将其添加到数组中 在集合中。
Storages.update(storageId , {$addToSet: { "storageArticles" : articleId }});
$ pop删除数组的第一项或最后一项。
Storages.update(storageId , { $pop : 1 });
$ pull删除所有与指定查询匹配的数组元素。
Storages.update(storageId , {$pull: { "storageArticles" : articleId }});
$ push将项目添加到数组。
Storages.update(storageId , {$push: { "storageArticles" : articleId }});
$ pullAll从数组中删除所有匹配的值。
Storages.update(storageId , {$pullAll: { "storageArticles" : [articleId1, articleId2] }});