如何在与meteor的mongo查询中使用新的Meteor.Collection.ObjectID()?

Sco*_*ott 5 mongodb meteor

我有一个Collection,其中包含一组嵌套对象的文档.以下是填充数据库的fixture代码:

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"
            },

        ]
    });
}
Run Code Online (Sandbox Code Playgroud)

您可能会问自己,为什么我只需要根据名称进行更新时就需要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");
            }
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

我从控制台打来的电话:

Meteor.call('upChild', {
  _id: "5NuiSNQdNcZwau92M",
  fieldId: "9b93aa1ef3868d762b84d2f2",
  position: 1
});
Run Code Online (Sandbox Code Playgroud)

这里是html的截图,我正在渲染父母和子女系列的所有数据: 在此输入图像描述

小智 12

只是一个观察,因为我正在寻找如何生成唯一ID客户端出于类似的原因.我发现调用新的Meteor.Collection.ObjectID()以"ObjectID("abc ...")'的形式返回一个对象.通过将Meteor.Collection.ObjectID()._ str分配给_id,我将字符串改为'abc ...',这就是我想要的.

我希望这会有所帮助,我很想知道是否有人有更好的方法来处理这个问题?

贾森


Bru*_*mos 12

避免使用_str,因为它可能在将来发生变化.用这个:

new Meteor.Collection.ObjectID().toHexString() 要么

new Meteor.Collection.ObjectID().valueOf()


您也可以使用官方随机包:

Random.id()