我有一个Collection,其中包含一组嵌套对象的文档。 以下是填充数据库的夹具代码:
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集合的所有数据:
答案 0 :(得分:12)
只是一个观察,因为我正在寻找如何生成唯一ID客户端出于类似的原因。我发现调用新的Meteor.Collection.ObjectID()以“ObjectID(”abc ...“)'的形式返回一个对象。通过将Meteor.Collection.ObjectID()._ str分配给_id,我将字符串改为'abc ...',这就是我想要的。
我希望这会有所帮助,我很想知道是否有人有更好的方法来解决这个问题?
杰森
答案 1 :(得分:12)
避免使用_str,因为它可能在将来发生变化。使用此:
new Meteor.Collection.ObjectID().toHexString()
或
new Meteor.Collection.ObjectID().valueOf()
您也可以使用官方random package:
Random.id()