我正在尝试将数组插入到对象中,但我没有运气。我认为架构基于验证拒绝它,但我不确定为什么。如果我console.log(this.state.typeOfWork)
并检查typeof
,则说明其Object
包含:
(2) ["Audit - internal", "Audit - external"]
0: "Audit - internal"
1: "Audit - external"
更新后的我的收藏包含:
"roleAndSkills": {
"typeOfWork": []
}
示例:Schema
roleAndSkills: { type: Object, optional: true },
'roleAndSkills.typeOfWork': { type: Array, optional: true },
'roleAndSkills.typeOfWork.$': { type: String, optional: true }
示例:update
ProfileCandidate.update(this.state.profileCandidateCollectionId, {
$set: {
roleAndSkills: {
typeOfWork: [this.state.typeOfWork]
}
}
});
答案 0 :(得分:0)
typeOfWork
是Array
。你应该把它的价值推进其中:
$push: {
"roleAndSkills.typeOfWork": this.state.typeOfWork
}
表示多个值:
$push: {
"roleAndSkills.typeOfWork": { $each: [ "val1", "val2" ] }
}
答案 1 :(得分:0)
简单模式在对象或数组上的验证存在一些问题,我在最近开发的应用程序中遇到了同样的问题。
你能做什么? 好吧,我在Collections.js文件中做了什么,当你说:
typeOfWork:{
type: Array
}
尝试添加属性blackbox:true,如下所示:
typeOfWork:{
blackbox: true,
type: Array
}
这将告诉您的Schema该字段正在采用数组,但忽略了进一步的验证。
我做的验证是在main.js上,为了确保我没有空数组,数据是纯文本。
这里要求的是我的更新方法,在我的情况下,我使用的对象不是数组,但它的工作方式相同。
editUser: function (editedUserVars, uid) {
console.log(uid);
return Utilizadores.update(
{_id: uid},
{$set:{
username: editedUserVars.username,
usernim: editedUserVars.usernim,
userrank: {short: editedUserVars.userrank.short,
long: editedUserVars.userrank.long},
userspec: {short: editedUserVars.userspec.short,
long: editedUserVars.userspec.long},
usertype: editedUserVars.usertype}},
{upsert: true})
},
这里是集合架构
UtilizadoresSchema = new SimpleSchema({
username:{
type: String
},
usernim:{
type: String
},
userrank:{
blackbox: true,
type: Object
},
userspec:{
blackbox: true,
type: Object
},
usertype:{
type: String
}
});
Utilizadores.attachSchema(UtilizadoresSchema);
希望有所帮助
罗布
答案 2 :(得分:0)
您声明this.state.typeOfWork
是一个数组(字符串),但是当您.update()
文档时,您将其括在方括号中:
ProfileCandidate.update(this.state.profileCandidateCollectionId, {
$set: {
roleAndSkills: {
typeOfWork: [this.state.typeOfWork]
}
}
});
只需删除多余的方括号:
ProfileCandidate.update(this.state.profileCandidateCollectionId, {
$set: {
roleAndSkills: {
typeOfWork: this.state.typeOfWork
}
}
});
此外,由于您的数组只是一个字符串数组,因此您可以通过[String]
为类型声明它来简化您的模式:
'roleAndSkills.typeOfWork': { type: [String] }
此外,请注意,对象和数组默认是可选的,因此您甚至可以省略可选标记。