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

Mongodb 如何在mongo与Meteor的查询中使用new Meteor.Collection.ObjectID()?,mongodb,meteor,Mongodb,Meteor,我有一个集合,其中包含带有嵌套对象数组的文档。 以下是用于填充数据库的夹具代码: if (Parents.find().count() == 0) { var parentId = Parents.insert({ name: "Parent One" }); Children.insert({ parent: parentId, fields: [ { _id: ne

我有一个集合,其中包含带有嵌套对象数组的文档。 以下是用于填充数据库的夹具代码:

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的屏幕截图,在这里我呈现了家长和孩子集合的所有数据:

这只是一个观察,因为我正在研究如何为类似的原因生成唯一的IDs客户端。我发现调用new Meteor.Collection.ObjectID()返回的是一个“ObjectID”(“abc…”)形式的对象。通过将Meteor.Collection.ObjectID()._str分配给_id,我得到了字符串“abc…”,这正是我想要的

我希望这能有所帮助,我很想知道是否有人有更好的处理方法


Jason

避免使用_str,因为它将来可能会改变。使用以下命令:

新建Meteor.Collection.ObjectID().toHexString()

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


您还可以使用官方网站:


Random.id()。这样做对我来说很有效,但我认为“new Meteor.Collection.ObjectID()”检查ID的唯一性,而仅仅将生成的字符串转换为str对象可能会绕过唯一性检查,从而在将来导致大型数据库出现问题。目前还不打算扩展我的项目,但对于大型项目来说可能会有问题。那么,有没有办法在存储生成的id的字符串形式时确保id的唯一性?这对我来说很有效,因为我的应用程序也必须脱机工作,因此无法保证服务器始终保持唯一性。所用例程()的Meteor文档意味着标准代码可能是全局唯一的。但是,如果您可能生成数百万条记录,您可能需要考虑另一种方法。