我有一个集合,其中包含带有嵌套对象数组的文档。这是填充数据库的夹具代码:
if (Parents.find().count() == 0) {
var parentId = Parents.insert({
name: "Parent One"
});
Children.insert({
parent: parentId,
fields: [
{
_id: new Meteor.Collection.ObjectID(),
position: 3,
name: "three"
},
{
_id: new Meteor.Collection.ObjectID(),
position: 1,
name: "one"
},
{
_id: new Meteor.Collection.ObjectID(),
position: 2,
name: "two"
},
]
});
}
您可能会问自己,当我可以根据名称进行更新时,为什么我什至需要 ObjectID。这是我目前正在处理的更复杂模式的简化示例,嵌套对象将动态创建,ObjectID 肯定是完成这项工作所必需的。
基本上,我需要一种方法来保存具有唯一 ID 的嵌套对象,并能够通过它们的 _id 更新字段。
这是我的方法,以及我从浏览器控制台进行的调用:
Meteor.methods({
upChild: function( options ) {
console.log(new Meteor.Collection.ObjectID());
Children.update({_id: options._id, "fields._id": options.fieldId }, {$set: {"fields.$.position": options.position}}, function(error){
if(error) {
console.log(error);
} else {
console.log("success");
}
});
}
});
我从控制台打来的电话:
Meteor.call('upChild', {
_id: "5NuiSNQdNcZwau92M",
fieldId: "9b93aa1ef3868d762b84d2f2",
position: 1
});
这是 html 的屏幕截图,我在其中渲染了 Parents 和 Children 集合的所有数据: