Mongodb 如何使用mongo shell更改字段的数据类型?

Mongodb 如何使用mongo shell更改字段的数据类型?,mongodb,mongodb-query,Mongodb,Mongodb Query,是否可以更改数据类型。例如,我有一个字段“user”,它的数据类型是string。我需要将其数据类型更改为ObjectId 我试过了,但还是出错了 > db.booking.find().foreach( function (x) { x.user = ObjectId(x.user); db.booking.save(x); }); 2017-06-28T09:30:35.317+0000 E QUERY [thread1] TypeError: db.booking.find(.

是否可以更改数据类型。例如,我有一个字段“user”,它的数据类型是string。我需要将其数据类型更改为ObjectId

我试过了,但还是出错了

> db.booking.find().foreach( function (x) { x.user = ObjectId(x.user); db.booking.save(x); });
2017-06-28T09:30:35.317+0000 E QUERY    [thread1] TypeError: db.booking.find(...).foreach is not a function :
@(shell):1:1
>

最好的方法是将批量操作API用于:


与此不同的是,像这样的方法只更新指定的字段,并且实际上只“批量”提交到服务器,因此可以消除每次写入时来回通信的开销,每个批只进行一次写入和确认。使用500是一个合理的大小,但底层驱动程序和服务器总是在1000时分开。

您真是太棒了!谢谢你
var ops = [];
db.booking.find({},{ "user": 1 }).forEach(doc => {
  doc.user = new ObjectId(doc.user.valueOf());

  ops.push({
    "updateOne": {
      "filter": { "_id": doc._id },
      "update": {
        "$set": { "user": doc.user }
      }
    }
  });

  if ( ops.length >= 500 ) {
    db.booking.bulkWrite(ops);
    ops = [];
  }
});

if ( ops.length > 0 ) {
  db.booking.bulkWrite(ops);
  ops = [];
}