我正在尝试更新我的集合,其中包含一个数组字段(最初为空白),为此我正在尝试此代码
Industry.update({_id:industryId},
{$push:{categories: id:categoryId,
label:newCategory,
value:newCategory }}}});
没有显示错误,但在我的收藏中只创建了空文档({})。
注意:我同时拥有categoryId
和newCategory
,因此没有任何问题。
提前谢谢。
这是架构:
Industry = new Meteor.Collection("industry");
Industry.attachSchema(new SimpleSchema({
label:{
type:String
},
value:{
type:String
},
categories:{
type: [Object]
}
}));
答案 0 :(得分:0)
如果在mongo shell中运行此查询,它将生成一个匹配的日志:1,更新:0。请检查一下你会得到什么。如果匹配为0,则表示您的输入查询没有任何匹配的文档。
答案 1 :(得分:0)
我不确定但也许错误正在发生,因为您没有验证'类别'在您的架构中。尝试添加' blackbox:true'到你的类别'所以它接受任何类型的对象。
Industry.attachSchema(new SimpleSchema({
label: {
type: String
},
value: {
type: String
},
categories: {
type: [Object],
blackbox:true // allows all objects
}
}));
完成后,尝试像这样添加值
var newObject = {
id: categoryId,
label: newCategory,
value: newCategory
}
Industry.update({
_id: industryId
}, {
$push: {
categories: newObject //newObject can be anything
}
});
这将允许您将任何类型的对象添加到类别字段中。 但是你在评论中提到类别也是另一个集合。 如果您已经有类别的SimpleSchema,那么您可以验证categories字段以仅接受与SimpleSchema匹配的对象,例如
Industry.attachSchema(new SimpleSchema({
label: {
type: String
},
value: {
type: String
},
categories: {
type: [categoriesSchema] // replace categoriesSchema by name of SimpleSchema for categories
}
}));
在这种情况下,只有与categoriesSchema匹配的对象才会被允许进入类别字段。任何其他类型都将被过滤掉。你也不会在控制台上遇到任何错误,试图插入其他类型。(这是我认为当你尝试现在插入时没有指定验证的情况下发生的事情)
编辑:解答说明
在SimpleSchema中定义一个对象数组时,你必须验证它,即你必须告诉它它可以接受哪些对象以及它可以接受什么。 例如,当您将其定义为
时...
categories: {
type: [categoriesSchema] // Correct
}
这意味着只能在其中插入与名为categoriesSchema的另一个SimpleSchema结构相似的对象。根据您的示例,您尝试插入的任何对象都应采用此格式
{
id: categoryId,
label: newCategory,
value: newCategory
}
任何不符合此格式的对象都会在插入时被拒绝。这就是为什么你尝试插入的所有对象,当你最初尝试使用像这样的
结构的架构时,它被拒绝了...
categories: {
type: [Object] // Not correct as there is no SimpleSchema named 'Object' to match with
}
<强> 黑箱:真 强>
现在,假设您没有要过滤的对象,并希望无需验证即可插入所有对象。 设置&#34; blackbox:true&#34;进来。如果你定义一个像这样的字段
...
categories: {
type: [Object], // Correct
blackbox:true
}
这意味着类别可以是任何对象,无需针对其他一些SimpleSchema进行验证。所以无论你试图插入什么都会被接受。