如何更改嵌入对象的数据类型 - mongoDB?

时间:2014-06-17 06:48:31

标签: javascript mongodb

我在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);});

任何建议都将不胜感激

2 个答案:

答案 0 :(得分:1)

你很近但你需要循环内部数组

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);
});

答案 1 :(得分:1)

您的request字段是一个数组,因此您应该迭代它以更改值&#34; currentVisit&#34;每个子文档中的字段:

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

    db.visits.save(doc);
});