1

Now, I can find 'versions.0.content.axdducvoxb' with quotes but i don't know how I have to write parseFloat(data.versions.0.content.axdducvoxb)

I try to use code for string -> number conversions in MongoDB. I do this for using aggregate

It works:

db.documents.find().forEach(function(data) {
    db.documents.update({_id:data._id},{$set:{axdducvoxb:parseFloat(data.axdducvoxb)}});
})

I have array with versions, and it doesn't work:

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

I see error like this: 27 14:14:58.543 SyntaxError: Unexpected number

Please tell me what I have to do )))

First answer does not work (((

If I correct query and try it:

db.documents.find().forEach(function(data) {   db.documents.update({_id:data._id},{$set:{"versions.0.content.axdducvoxb":parseFloat(data.versions.0.content.axdducvoxb)}}}); })
    Mon Mar 31 13:23:45.474 SyntaxError: Unexpected number

If I add quotes for both indexes I clean the base:

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

I need to transform all strings with numbers to float )))

I did it!!! May be somebody need the same....

My code for String to Float conversion in mongo DB console (4 examples):

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 script to conversion string to float in collection (all strings I need):

<?php
$fieldNamesToFloat = array(
         "atkswlntfd",
         "auwbsjqzir",
         "avqrnjzbgd",
         "awquatbduv",
         "axdducvoxb",
         "bkoldugcrp",
         "bzccjslewi",
         "cclwyezydc",
         "covfctuuhi",
         "dingrnyknr",
         "dkfknpzsnt",
         "dqetuhllse",
         "duorlxiqbw",
         "eayoicezsh",
         "esrfffruoy",
         "ewdunlkxue",
         "ewfshjnome",
         "exakqiudxg",
         "fabdcybqxu",
         "fsplxunmaf",
         "fubxmogyam",
         "fuzqrnwsks",
         "fwtweaeeba",
         "fybnnlojgb",
         "gdjheqrqcx",
         "gpupstzwjd",
         "gxilphzzcu",
         "hbahrruokf",
         "hbqnleclwp",
         "hchpoxxnwz",
         "hmorfnbfvf",
         "hqatnzynxb",
         "hrqssioxdv",
         "hvscavwupe",
         "hyzlbtnxil",
         "idzxqjoxgd",
         "ikxsvguboy",
         "ipjpwkbqnt",
         "izqighabwk",
         "jncncbplme",
         "jxkspszlrc",
         "kekarveuhb",
         "klyoglzriu",
         "kmvuelmdwe",
         "knxzfjwnax",
         "kqfhjboecc",
         "kqhojbwvmo",
         "lchogmhynm",
         "lmuwyeqvph",
         "lvcdbhisbx",
         "mijczjeqeo",
         "mpxzquzcat",
         "mqqoetqued",
         "muktdrzphw",
         "nceszojuvt",
         "nypnjqgxop",
         "ojklibfieg",
         "padotysmxb",
         "pidwyruvfq",
         "pkeymzxsrj",
         "pnjtfvzwiv",
         "pqjnpoxmcx",
         "pyexnkjujx",
         "qfeqdvzssg",
         "qidslfqnwn",
         "qvjszkahdc",
         "qzoriqedoh",
         "rjicuyfsmt",
         "rqenalbuko",
         "rxkwogbxwu",
         "sbqqabqukn",
         "skhgbmucrp",
         "slewjrvgjn",
         "tidjarsatz",
         "tmbagkmlgb",
         "uqcdessbeu",
         "vacoxpronz",
         "vdjfydjrpa",
         "vktxndqyhm",
         "vmfqvfjptu",
         "vofeebpgsc",
         "wewmtafjvk",
         "wfqdcsrltv",
         "wzmbxalguv",
         "xjllpdyool",
         "xjxbwynytx",
         "xmirihwycl",
         "xxrsnjlmfv",
         "ybgdjpexth",
         "ymkmkuxlrq",
         "yneoycjloj",
         "yogujlfvpb",
         "zahigfmqxb",
         "znqqhqkjte",
         "zyztudtziu"
);
$m = new MongoClient();
$db = $m->foo_data;
$collection = new MongoCollection($db, 'documents');
foreach($fieldNamesToFloat as $fieldName){
    foreach($db->documents->find(array("type" => "chair")) as $document){
        $db->documents->update(
            array('_id' => $document[_id]),
            array(
                '$set' => array(
                    'versions.0.content.'.$fieldName => (float)$document['versions'][0]['content'][$fieldName],
                    'versions.1.content.'.$fieldName => (float)$document['versions'][1]['content'][$fieldName],
                    'versions.2.content.'.$fieldName => (float)$document['versions'][2]['content'][$fieldName],
                    $fieldName => (float)$document[$fieldName]
                )
            ),
            array('$multi' => true)
        );
    }
}
echo "well done";      
?> 
4
  • what is the value of data.axdducvoxb. Print in console Commented Mar 31, 2014 at 12:30
  • 1
    When using dot . notation you need yo quote as in "versions.0.content.axdducvoxb" Commented Mar 31, 2014 at 12:36
  • Umm... you're not using aggregate at all here... Commented Mar 31, 2014 at 12:39
  • I prepare db to use aggregate Commented Apr 1, 2014 at 12:14

1 Answer 1

3

You should try wrapping $set value in quotes as shown below:

"versions.0.content.axdducvoxb":parseFloat(data.versions.0.content.axdducvoxb)

Final result:

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

Whenever you use this dot notation, you are required to wrap the key in quotes as mentioned in the documentation (emphasis added):

To access an element of an array by the zero-based index position, concatenate the array name with the dot (.) and zero-based index position, and enclose in quotes

Sign up to request clarification or add additional context in comments.

1 Comment

Good answer! Wherever possible, it is preferred to back your claim with some reference to the documentation. I've added it for you.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.