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文档意味着标准代码可能是全局唯一的。但是,如果您可能生成数百万条记录,您可能需要考虑另一种方法。