Hi Ziink,

Thanks for the answers! It's a bit strange that something like this is so 
complex to code.

I have managed to do the query we want with:
var mydb = orient.getGraph();

var nearbyNodes = mydb.command('sql',"select in('Contributes_To') from " +
originNode, []);

var nearbyNodesID = nearbyNodes[0].getRecord().field('in');

What is the best way of now applying a mathematical javascript function to 
a parameter from the given nodes? What we want is something like:

   1. Iterate through the child nodes of a select originNode
   2. For each one of these nodes:
      - apply a propagation() function to the node parameter "activation"
      - update the value of that parameter in the database
      
We are trying to do it by:

   1. Making a query for the child nodes of originNode and assign it to 
   nearbyNodes
   2. Extracting the @rid's from the returned object and assigning them to 
   a variable nearbyNodesID
   3. Update the parameter "activation" from every node with an @rid 
   present in nearbyNodesID with a value returned from our propagation() 
   function

Does this make sense? Do you have any other pointers?
If I try to use your function toJSObject for nearbyNodes, I get an error. 
If I use for nearbyNodesID I get JSON Object with some wrong parameters:
[
    {
        "@type": "d",
        "@version": 0,
        "value": [
            [
                {
                    "name": "artigos indefinidos"
                },
                {
                    "in_Contributes_To": [
                        [
                            {
                                "out": "[class 
com.orientechnologies.orient.core.id.ORecordId Fields] valid, 
clusterPosition, next, temporary, hashCode, fromStream, wait, fromString, 
toStream, identity, isPersistent, notify, reset, copyFrom, getIdentity, 
notifyAll, copy, getClass, isTemporary, unlock, equals, isNew, compare, 
getClusterPosition, getClusterId, lock, class, compareTo, record, new, 
persistent, nextRid, toString, clusterId, isValid, getRecord, "
                            },
                            {
                                "in": "[class 
com.orientechnologies.orient.core.id.ORecordId Fields] valid, 
clusterPosition, next, temporary, hashCode, fromStream, wait, fromString, 
toStream, identity, isPersistent, notify, reset, copyFrom, getIdentity, 
notifyAll, copy, getClass, isTemporary, unlock, equals, isNew, compare, 
getClusterPosition, getClusterId, lock, class, compareTo, record, new, 
persistent, nextRid, toString, clusterId, isValid, getRecord, "
                            }
                        ],
                        [
                            {
                                "out": "[class 
com.orientechnologies.orient.core.id.ORecordId Fields] valid, 
clusterPosition, next, temporary, hashCode, fromStream, wait, fromString, 
toStream, identity, isPersistent, notify, reset, copyFrom, getIdentity, 
notifyAll, copy, getClass, isTemporary, unlock, equals, isNew, compare, 
getClusterPosition, getClusterId, lock, class, compareTo, record, new, 
persistent, nextRid, toString, clusterId, isValid, getRecord, "
                            },
                            {
                                "in": "[class 
com.orientechnologies.orient.core.id.ORecordId Fields] valid, 
clusterPosition, next, temporary, hashCode, fromStream, wait, fromString, 
toStream, identity, isPersistent, notify, reset, copyFrom, getIdentity, 
notifyAll, copy, getClass, isTemporary, unlock, equals, isNew, compare, 
getClusterPosition, getClusterId, lock, class, compareTo, record, new, 
persistent, nextRid, toString, clusterId, isValid, getRecord, "
                            }
                        ]
                    ]
                },
                {
                    "out_Contributes_To": [
                        [
                            {
                                "out": "[class 
com.orientechnologies.orient.core.id.ORecordId Fields] valid, 
clusterPosition, next, temporary, hashCode, fromStream, wait, fromString, 
toStream, identity, isPersistent, notify, reset, copyFrom, getIdentity, 
notifyAll, copy, getClass, isTemporary, unlock, equals, isNew, compare, 
getClusterPosition, getClusterId, lock, class, compareTo, record, new, 
persistent, nextRid, toString, clusterId, isValid, getRecord, "
                            },
                            {
                                "in": "[class 
com.orientechnologies.orient.core.id.ORecordId Fields] valid, 
clusterPosition, next, temporary, hashCode, fromStream, wait, fromString, 
toStream, identity, isPersistent, notify, reset, copyFrom, getIdentity, 
notifyAll, copy, getClass, isTemporary, unlock, equals, isNew, compare, 
getClusterPosition, getClusterId, lock, class, compareTo, record, new, 
persistent, nextRid, toString, clusterId, isValid, getRecord, "
                            }
                        ]
                    ]
                },
                {
                    "activation": 0
                }
            ],
            [
                {
                    "name": "artigos definidos"
                },
                {
                    "in_Contributes_To": [
                        [
                            {
                                "out": "[class 
com.orientechnologies.orient.core.id.ORecordId Fields] valid, 
clusterPosition, next, temporary, hashCode, fromStream, wait, fromString, 
toStream, identity, isPersistent, notify, reset, copyFrom, getIdentity, 
notifyAll, copy, getClass, isTemporary, unlock, equals, isNew, compare, 
getClusterPosition, getClusterId, lock, class, compareTo, record, new, 
persistent, nextRid, toString, clusterId, isValid, getRecord, "
                            },
                            {
                                "in": "[class 
com.orientechnologies.orient.core.id.ORecordId Fields] valid, 
clusterPosition, next, temporary, hashCode, fromStream, wait, fromString, 
toStream, identity, isPersistent, notify, reset, copyFrom, getIdentity, 
notifyAll, copy, getClass, isTemporary, unlock, equals, isNew, compare, 
getClusterPosition, getClusterId, lock, class, compareTo, record, new, 
persistent, nextRid, toString, clusterId, isValid, getRecord, "
                            }
                        ],
                        [
                            {
                                "out": "[class 
com.orientechnologies.orient.core.id.ORecordId Fields] valid, 
clusterPosition, next, temporary, hashCode, fromStream, wait, fromString, 
toStream, identity, isPersistent, notify, reset, copyFrom, getIdentity, 
notifyAll, copy, getClass, isTemporary, unlock, equals, isNew, compare, 
getClusterPosition, getClusterId, lock, class, compareTo, record, new, 
persistent, nextRid, toString, clusterId, isValid, getRecord, "
                            },
                            {
                                "in": "[class 
com.orientechnologies.orient.core.id.ORecordId Fields] valid, 
clusterPosition, next, temporary, hashCode, fromStream, wait, fromString, 
toStream, identity, isPersistent, notify, reset, copyFrom, getIdentity, 
notifyAll, copy, getClass, isTemporary, unlock, equals, isNew, compare, 
getClusterPosition, getClusterId, lock, class, compareTo, record, new, 
persistent, nextRid, toString, clusterId, isValid, getRecord, "
                            }
                        ],
                        [
                            {
                                "out": "[class 
com.orientechnologies.orient.core.id.ORecordId Fields] valid, 
clusterPosition, next, temporary, hashCode, fromStream, wait, fromString, 
toStream, identity, isPersistent, notify, reset, copyFrom, getIdentity, 
notifyAll, copy, getClass, isTemporary, unlock, equals, isNew, compare, 
getClusterPosition, getClusterId, lock, class, compareTo, record, new, 
persistent, nextRid, toString, clusterId, isValid, getRecord, "
                            },
                            {
                                "in": "[class 
com.orientechnologies.orient.core.id.ORecordId Fields] valid, 
clusterPosition, next, temporary, hashCode, fromStream, wait, fromString, 
toStream, identity, isPersistent, notify, reset, copyFrom, getIdentity, 
notifyAll, copy, getClass, isTemporary, unlock, equals, isNew, compare, 
getClusterPosition, getClusterId, lock, class, compareTo, record, new, 
persistent, nextRid, toString, clusterId, isValid, getRecord, "
                            }
                        ],
                        [
                            {
                                "out": "[class 
com.orientechnologies.orient.core.id.ORecordId Fields] valid, 
clusterPosition, next, temporary, hashCode, fromStream, wait, fromString, 
toStream, identity, isPersistent, notify, reset, copyFrom, getIdentity, 
notifyAll, copy, getClass, isTemporary, unlock, equals, isNew, compare, 
getClusterPosition, getClusterId, lock, class, compareTo, record, new, 
persistent, nextRid, toString, clusterId, isValid, getRecord, "
                            },
                            {
                                "in": "[class 
com.orientechnologies.orient.core.id.ORecordId Fields] valid, 
clusterPosition, next, temporary, hashCode, fromStream, wait, fromString, 
toStream, identity, isPersistent, notify, reset, copyFrom, getIdentity, 
notifyAll, copy, getClass, isTemporary, unlock, equals, isNew, compare, 
getClusterPosition, getClusterId, lock, class, compareTo, record, new, 
persistent, nextRid, toString, clusterId, isValid, getRecord, "
                            }
                        ]
                    ]
                },
                {
                    "out_needs": [
                        "[class 
com.orientechnologies.orient.core.record.impl.ORecordBytes Fields] 
getOwner, unload, save, setDirty, fromStream, hashCode, wait, toStream, 
getDatabaseIfDefined, reset, recordType, getSize, copy, notifyAll, unlock, 
detach, equals, compare, class, compareTo, size, record, dirtyNoChanged, 
owner, recordVersion, load, toString, internalStatus, reload, 
databaseIfDefined, isDirty, version, clear, copyTo, identity, getVersion, 
notify, dirty, delete, getIdentity, setDirtyNoChanged, getClass, 
getInternalStatus, getRecordType, toOutputStream, lock, getRecordVersion, 
database, toJSON, getDatabase, setInternalStatus, fromJSON, 
fromInputStream, getRecord, "
                    ]
                },
                {
                    "out_Contributes_To": [
                        [
                            {
                                "out": "[class 
com.orientechnologies.orient.core.id.ORecordId Fields] valid, 
clusterPosition, next, temporary, hashCode, fromStream, wait, fromString, 
toStream, identity, isPersistent, notify, reset, copyFrom, getIdentity, 
notifyAll, copy, getClass, isTemporary, unlock, equals, isNew, compare, 
getClusterPosition, getClusterId, lock, class, compareTo, record, new, 
persistent, nextRid, toString, clusterId, isValid, getRecord, "
                            },
                            {
                                "in": "[class 
com.orientechnologies.orient.core.id.ORecordId Fields] valid, 
clusterPosition, next, temporary, hashCode, fromStream, wait, fromString, 
toStream, identity, isPersistent, notify, reset, copyFrom, getIdentity, 
notifyAll, copy, getClass, isTemporary, unlock, equals, isNew, compare, 
getClusterPosition, getClusterId, lock, class, compareTo, record, new, 
persistent, nextRid, toString, clusterId, isValid, getRecord, "
                            }
                        ]
                    ]
                },
                {
                    "activation": 0
                }
            ],
            [
                {
                    "name": "omissão de artigo"
                },
                {
                    "out_Contributes_To": [
                        [
                            {
                                "out": "[class 
com.orientechnologies.orient.core.id.ORecordId Fields] valid, 
clusterPosition, next, temporary, hashCode, fromStream, wait, fromString, 
toStream, identity, isPersistent, notify, reset, copyFrom, getIdentity, 
notifyAll, copy, getClass, isTemporary, unlock, equals, isNew, compare, 
getClusterPosition, getClusterId, lock, class, compareTo, record, new, 
persistent, nextRid, toString, clusterId, isValid, getRecord, "
                            },
                            {
                                "in": "[class 
com.orientechnologies.orient.core.id.ORecordId Fields] valid, 
clusterPosition, next, temporary, hashCode, fromStream, wait, fromString, 
toStream, identity, isPersistent, notify, reset, copyFrom, getIdentity, 
notifyAll, copy, getClass, isTemporary, unlock, equals, isNew, compare, 
getClusterPosition, getClusterId, lock, class, compareTo, record, new, 
persistent, nextRid, toString, clusterId, isValid, getRecord, "
                            }
                        ]
                    ]
                },
                {
                    "in_Contributes_To": [
                        [
                            {
                                "out": "[class 
com.orientechnologies.orient.core.id.ORecordId Fields] valid, 
clusterPosition, next, temporary, hashCode, fromStream, wait, fromString, 
toStream, identity, isPersistent, notify, reset, copyFrom, getIdentity, 
notifyAll, copy, getClass, isTemporary, unlock, equals, isNew, compare, 
getClusterPosition, getClusterId, lock, class, compareTo, record, new, 
persistent, nextRid, toString, clusterId, isValid, getRecord, "
                            },
                            {
                                "in": "[class 
com.orientechnologies.orient.core.id.ORecordId Fields] valid, 
clusterPosition, next, temporary, hashCode, fromStream, wait, fromString, 
toStream, identity, isPersistent, notify, reset, copyFrom, getIdentity, 
notifyAll, copy, getClass, isTemporary, unlock, equals, isNew, compare, 
getClusterPosition, getClusterId, lock, class, compareTo, record, new, 
persistent, nextRid, toString, clusterId, isValid, getRecord, "
                            }
                        ]
                    ]
                },
                {
                    "activation": 0
                }
            ]
        ]
    }
]

Am I using the function incorrectlyy?

Thanks

On Monday, 25 May 2015 19:37:47 UTC+1, Ziink A wrote:
>
> Answer 1: Nope. No good docs.
> Answer 2: The following worked in 2.1 rc3
>
> orient.getGraph().command( "sql", "update Item set l_tags = '' where @rid in 
> ?", [tagged] );
>
>
> So you could try
>
> var nearbyNodes = mydb.command('sql',"select in('Contributes_To') from " 
> +originNode, []);
>
>
> Notice the the empty array. Maybe it's a required parameter.
>
>
> Answer 3:
>
> Check out 
>
> https://github.com/orientechnologies/orientdb/issues/2390
>
>
> Here's what I'm using (from above link without some logging code).
>
> toJSObject = """
> // This function should return a javascript object when you give it java 
> object like List, Map, OResultSet etc. //
> //function toJSObject(obj) {
>     function mapToJSObject(m) {
>         var ret = {};
>         // log("" + m + " IS A MAP (" + m.getClass() + ")");
>         var it = m.keySet().iterator();
>         while (it.hasNext()) {
>             var key = it.next();
>             ret[key] = toJSObject(m.get(key));
>         }
>
>         return ret;
>     };
>
>     function collectionToJSObject(c) {
>         var ret = [];
>         // log("" + c + " IS A COLLECTION (" + c.getClass() + ")");
>         var it = c.iterator();
>         while (it.hasNext()) {
>             ret.push(toJSObject(it.next()));
>         }
>
>         return ret;
>     };
>
>     if (obj == null) {
>         return "";
>     } else if (typeof obj == 'object') {
>         if (obj.getClass) {
>             //it's a java object !!!
>             var objClass = obj.getClass();
>             if (objClass == "class java.lang.String") {
>                 return new String(obj);
>             } else if (objClass == "class java.lang.Integer" || objClass == 
> "class java.lang.Long") {
>                 return parseInt(obj);
>             } else if (objClass == "class java.lang.Float" || objClass == 
> "class java.lang.Double") {
>                 return parseFloat(obj);
>             } else if (obj.iterator) {
>                 //Java COLLECTION (example ArrayList)
>                 return collectionToJSObject(obj);
>             } else if (obj.keySet) {
>                 //it's a Map (class java.util.HashMap for example)
>                 return mapToJSObject(obj);
>             } else if (obj.getKey) {
>                 // class java.util.LinkedHashMap
>                 var ret = {};
>                 ret[obj.getKey()] = toJSObject(obj.getValue());
>                 return ret;
>             } else {
>                 var ret = "[" + obj.getClass() + " Fields] ";
>                 for (var key in obj) {
>                     ret += key + ", ";
>                 }
>                 return ret;
>             }
>         } else {
>             var ret = {};
>             for (var key in obj) {
>                 if (obj.hasOwnProperty(key)) {
>                     ret[key] = toJSObject(obj[key]);
>                 }
>             }
>             return ret;
>         }
>     } else { //return as-is
>         return obj;
>     }
> //}
> """
>
>
>
> *Other tips.*
>
> *1. Hook functions provide the 'doc' variable that you can use. For example.*
>
> *var val = doc.field('propName')*
>
>
> *2. See the following file for other methods provided by 'doc'*
>
> core/src/main/java/com/orientechnologies/orient/core/record/impl/ODocument.java
>  
> <https://github.com/orientechnologies/orientdb/blob/9c8c12bc1207e6607048ba94527bd1c09b32bcfa/core/src/main/java/com/orientechnologies/orient/core/record/impl/ODocument.java>
>  
>
>
> 3. If you are making changes in the hook function, be sure to 
>
> return 'RECORD_CHANGED';
>
>
> 4. Where java function requires a vararg (...), provide an array, even for 
> single values. For example, to save an array to a field.
>
> var OType = com.orientechnologies.orient.core.metadata.schema.OType
>
> doc.field('prop1', arrayValue, [OType.EMBEDDEDSET])
>
>
>
>
>
> On Monday, May 25, 2015 at 10:21:30 AM UTC-7, Joao Barcia wrote:
>>
>> Hi everyone,
>>
>> First of all, thanks for the great work on OrientDB! We've been really 
>> amazed with it. The only major roadblock we have found is functions.
>>
>> We've spent some time trying to implement simple functions in the studio 
>> and the lack of documentation mixed with seemingly changing syntax makes 
>> things quite difficult. i.e.: orient.getGraph() function seems to work 
>> on 2.0.3 but not on 2.0.9 or 2.1-rc2. 
>>
>> Here is the code we have so far running on 2.0.3:
>> "
>> var mydb = orient.getGraph();
>>
>> var nearbyNodes = mydb.command('sql',"select in('Contributes_To') from " 
>> +originNode);
>>
>> return nearbyNodes;
>> "
>>
>> I would like to iterate through each of the nodes returned from the 
>> query. Inside of each node I would like to apply a javascript function 
>> "propagation()" to the parameter "activation" from that node and change it 
>> accordingly.
>>
>> So,
>>
>> *QUESTION 1* - Is there an updated and reliable documentation source for 
>> JavaScript Functions in OrientDB?
>> *QUESTION 2* - What is the correct way of doing an SQL command for newer 
>> versions (2.0.9 and 2.1-rc2)? The example above does not seem to work in 
>> new versions.
>> *QUESTION 3* - What is the correct way of handling the returned objects? 
>> As it was explained here 
>> <http://stackoverflow.com/questions/27657784/how-to-extract-the-result-of-a-query-from-json-inside-a-custom-javascript-functi>
>>  
>> does not seem to work
>>
>> Thank you very much
>>
>>
>> Cheers,
>> Joao
>>
>

-- 

--- 
You received this message because you are subscribed to the Google Groups 
"OrientDB" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to