2017-06-28 91 views
0

是否可以更改數據類型。例如我有一個字段'用戶',它的數據類型是字符串。我需要將其數據類型更改爲ObjectId。如何使用mongo shell更改字段的數據類型?

我試過了,但出現錯誤。

> 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 
> 

回答

1

最好的辦法是使用具有.bulkWrite()批量操作API:

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 = []; 
} 

至於反對像.save()方法,這只是更新指定的字段,以及實際上只犯「批次」到服務器,因此您可以在每次寫入時消除來回通信的開銷,從而每批僅寫入一次並確認。使用500是一個合理的大小,但底層驅動程序和服務器將始終在1000分離。

+0

你真的太棒了!謝謝 –

相關問題