mongodb php字符串浮动值

时间:2014-04-02 11:53:58

标签: php mongodb mongodb-php

我试过从mongodb控制台制作它,但它不起作用,因为我不能使用afrray [0] afrray [1] afrray [2]等数组

How to change array elements

现在我尝试从php开始,但我只看到基数为零(((

我错了什么?

$out = $collection->update(
        array("type" => 'chair'), array('$set' => array( 'vmfqvfjptu' => floatval('vmfqvfjptu'), 
        'versions.0.content.vmfqvfjptu'=> floatval('versions.0.content.vmfqvfjptu'),
        'versions.1.content.vmfqvfjptu'=> floatval('versions.1.content.vmfqvfjptu'),
        'versions.2.content.vmfqvfjptu'=> floatval('versions.2.content.vmfqvfjptu'),
        'versions.3.content.vmfqvfjptu'=> floatval('versions.3.content.vmfqvfjptu')
        )),
        array("multiple" => true)   
);

如何从floatval附近的数据库发送字符串(' versions.0.content.vmfqvfjptu')?

这个脚本在mongo控制台上运行良好。有4个脚本。每个人从数据库中获取字符串,将字符串转换为float并将float保存到数据库(对于集合中的每个文档)。

 db.documents.find({ 'fwtweaeeba' : {$exists : true}}).forEach( function(obj) { 
    obj.fwtweaeeba = parseFloat( obj.fwtweaeeba ); 
    db.documents.save(obj); } );    

db.documents.find({ 'versions.0.content.fwtweaeeba' : {$exists : true}}).forEach( function(obj) { 
    obj.versions[0].content.fwtweaeeba = parseFloat( obj.versions[0].content.fwtweaeeba ); 
    db.documents.save(obj); } );

db.documents.find({ 'versions.1.content.fwtweaeeba' : {$exists : true}}).forEach( function(obj) { 
    obj.versions[1].content.fwtweaeeba = parseFloat( obj.versions[1].content.fwtweaeeba );  
    db.documents.save(obj); } );

db.documents.find({ 'versions.2.content.fwtweaeeba' : {$exists : true}}).forEach( function(obj) { 
    obj.versions[2].content.fwtweaeeba = parseFloat( obj.versions[2].content.fwtweaeeba );  
    db.documents.save(obj); } );

我需要和php一样,因为我在每个文档中都有很多字段要转换......

它有效!!!!谢谢你,Sammaye !!!你真的帮了我!!!

foreach($db->documents->find(array("type" => "chair")) as $document){
//  my_dump($document[_id]);
    $db->documents->update(
        array('_id' => $document[_id]),
        array(
            '$set' => array(
                'versions.0.content.axdducvoxb' => (float)$document['versions'][0]['content']['axdducvoxb'],
                'versions.1.content.axdducvoxb' => (float)$document['versions'][1]['content']['axdducvoxb'],
                'versions.2.content.axdducvoxb' => (float)$document['versions'][2]['content']['axdducvoxb'],
                'axdducvoxb' => (float)$document['axdducvoxb']
            )
        ),
        array('$multi' => true)
    );


}

2 个答案:

答案 0 :(得分:0)

对于php,这个

floatval('versions.0.content.vmfqvfjptu')

评估为false。因为它不是db集合中字段的值

答案 1 :(得分:0)

从您链接的问题开始:

db.documents.find({"type": "chair"}).forEach(function(data) {   
    db.documents.update({_id:data._id},
                       {$set:{'versions.0.content.axdducvoxb':
                               parseFloat(data.versions.0.content.axdducvoxb)}}); 
})

将是:

foreach($db->documents->find(array("type" => "chair")) as $document){
    $db->documents->update(
        array('_id' => $document['_id']),
        array(
            '$set' => array(
                'versions.0.content.axdducvoxb' => floatval($document['versions'][0]['content']['axdducvoxb'])
            )
        )
    );
}

完成了。 好的答案