如何改变数据类型的嵌入式对象- mongoDB

How to change the data type of embedded object - mongoDB?

本文关键字:嵌入式 对象 mongoDB 数据类型 何改变 改变      更新时间:2023-09-26

我在mongoDB中有以下文档。我想将currentVisit数据类型更改为integer

{
    "_id" : ObjectId("5385e14f5caf98cc0712931c"),
    "location" : {
        "language" : null,
        "country" : "null",
    },
    "request" : [
        {
            "currentVisit" : "1401292066",
            "lastVisit" : "1401292066",
            "visitedTime" : "1401282894"
        }
    ]
}

注意

我试过下面的方法,但是行不通。

 db.visits.find().forEach( function (x) { x.request.currentVisit = parseInt(x.request.currentVisit); db.visits.save(x);});

如有任何建议,不胜感激

你很接近了,但是你也需要循环内部数组

db.visits.find().forEach(function (x) { 
    for ( var i=0; i <= x.request.length; i++ ) {
         x.request[i].currentVisit = parseInt(x.request[i].currentVisit);
    }
    db.visits.save(x);
});

你可能真的都想要:

db.visits.find().forEach(function (x) { 
    for ( var i=0; i <= x.request.length; i++ ) {
         x.request[i].currentVisit = parseInt(x.request[i].currentVisit);
         x.request[i].lastVisit = parseInt(x.request[i].lastVisit);
         x.request[i].visitedTime = parseInt(x.request[i].visitedTime);
    }
    db.visits.save(x);
});

您的request字段是一个数组,因此您应该遍历它以更改每个子文档中的值"currentVisit"字段:

db.visits.find().forEach( function (doc) { 
    doc.request.forEach(function(subdoc) {
        subdoc.currentVisit = parseInt(subdoc.currentVisit); 
    });
    db.visits.save(doc);
});