Meteor Mongo BulkOp将ObjectID转换为普通对象

时间:2017-09-11 21:57:42

标签: node.js mongodb meteor bulkinsert

使用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转换为普通对象的批量操作,并解决了这个问题。问题。)

1 个答案:

答案 0 :(得分:1)

来自Neil's top-level comment

  

在本机方法上,您实际上需要获取本机实现。您应该能够通过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};

在调用方法之前。