Hi Holger, by default, BSON should be decoding a ByteArray (if persisted as is) with data type âbinary dataâ, and you should be receiving a ByteArray as expected when reading. This is how SmalltalkHub works so I suspect there is something else going on (otherwise, there would be many, many people angry :P). Can you confirm the code is being persisted as binary data? (just check in the database). A simple workaround is to define an accessor: MyClass class>>#myByteArray <mongoDescription> ^ VOMongoToOneDescription new attributeName: âbyteArray'; accessor: (MAPluggableAccessor read: [ :anObject | anObject byteArray ] write: [ :anObject :value | anObject byteArray: value asByteArray ]); yourself cheers, Esteban
On 04 Sep 2015, at 19:51, Holger Freyther <holger@freyther.de> wrote:
Hi all,
it is the first time I notice this and I am not sure that this has been written down somewhere and if it is known to others (and then what to do about it).
I had an Object with a ByteArray and then tried to find this object using the ByteArray and it wasnât found. It looks like the ByteArray will be converted to an âarrayâ. When searching the ByteArray would not match it, an Array matches it. When using anArray to find the object and using a âgetterâ to get the value and comparing it will not lead to equality. I understand that Mongo doesnât have same types (Array, OrderedCollection, ByteArray) as Smalltalk but I wonder if there can be done something to improve the situation?
Is this known? Can we improve it? I can of course workaround it by converting it to an array/orderedcollection before comparing it.
holger
Example:
| data repository test res | repository := VOMongoRepository database: 'dbtest'. data := #[1 2 3 4]. test := ZEByteArrayVoyage new. test byteArray: data. repository save: test.
res := repository selectOne: ZEByteArrayVoyage where: [:each | each byteArray = data ]. res. "---> UndefinedObject"
res := repository selectOne: ZEByteArrayVoyage where: [:each | each byteArray = data asArray]. res. "---> ZEByteArrayVoyage"
res byteArray = data. âfalse.. OrderedCollection = ByteArray" res byteArray = data asArray. âOrderedCollection = Array" res byteArray = data asOrderedCollection. "true"