使用Meteor时,我有时会访问底层的Node Mongo驱动程序,以便进行批量更新和插入。
const bulk = Coll.rawCollection().initializeOrderedBulkOp();
bulk.insert({key_id: Mongo.Collection.ObjectID()}); // note key_id is an ObjectID
...
bulk.execute();
但是当我在插入后查看数据库时,key_id
字段的值最终成为普通子文档{_str: '...'}
。
有没有办法在Node的Mongo库中使用批量操作(Meteor使用的是什么),并将ObjectID作为Mongo的ObjectID类型保留?
(关于不同ID类型的性质以及解释Minimongo等的帖子很多。我特别感兴趣的是将ObjectID转换为普通对象的批量操作,并解决了这个问题。问题。)
答案 0 :(得分:1)
在本机方法上,您实际上需要获取本机实现。您应该能够通过MongoInternals [...]
从加载的驱动程序访问Mongo.Collection.ObjectID不是普通的ObjectId表示,实际上是Meteor内部使用的复杂对象。因此,为什么本地方法不知道如何使用该值。
因此,如果您有一些ObjectId
的字段,并且您正在使用Meteor Collection rawCollection
的某种方法(例如,
.distinct
.aggregate
.initializeOrderedBulkOp
.initializeUnorderedBulkOp
),您希望使用
转换ObjectId
const convertedID = new MongoInternals.NpmModule.ObjectID(
originalID._str
);
// then use in one of the arguments to your function or something
const query = {_id: convertedID};
在调用方法之前。