> Am 08.08.2015 um 10:38 schrieb Sabine Manaa <manaa.sab...@gmail.com>: > > Hi Norbert, > > lol, I had to google that: https://en.wikipedia.org/wiki/Heisenbug > funny but that's it. It is always a good feeling when I know what the reason > for a certain behavior is. > Now I can proceed with the implementation of the search functionality. > > no, in Mongo I don't store the back references, they are created when the > objects are instantiated in pharo. > Wouldn't you do it like this? What is the background for your question? > The background is that there is a difference between an in-memory graph and a persisted one. So storing forth and backreferences is asking for trouble. Having back references being transient and reestablishing them on materialization is a good way of having the best of both world.
Norbert > Regards > Sabine > > 2015-08-07 15:06 GMT+02:00 NorbertHartl [via Smalltalk] <[hidden email]>: >> >>> Am 07.08.2015 um 14:53 schrieb Sabine Manaa <[hidden email]>: >>> >>> Hi Norbert, Hi Phil, >>> >>> thanks for your help! Now I know what the problem is/was. :-))) >>> >>> The query was right, the index was used, all is fine. >>> >>> BUT: >>> I used an inspector to look at the query's result and opening the inspector >>> forced to load all the other objects which belong to the object found. >>> Explanation: I have a person which has N trips with N receipts, all with >>> back pointers. Opening an Inspector with one trip loads its person and all >>> other trips of this person hahaha. The magritte description isLazy but the >>> inspector forced the loading of the objects in the VOMongoRepository at >>> first time after image starting. >>> >>> Time millisecondsToRun: [(RKATrip selectMany: { >>> 'receipts.receiptDescription' -> 'a' } asDictionary) size] 764 . >>> Time millisecondsToRun: [(RKATrip selectMany: { >>> 'receipts.receiptDescription' -> 'a' } asDictionary) inspect] 17234 >>> >>> So, I messed around with myself. >> Well, we call this an inversed Heisenbug, don't we? :) That is a problem we >> should be aware when using proxy implementations and tools like gt tools. It >> is very likely that a powerful tool will inquire special information on a >> proxy that will trigger it. >> >>> Currently I do not have so much data but I hope in future there will be a >>> lot and I want the application prepared for that. >> It depends on the tool and your model. Are you storing those backreferences >> in mongo as well? >> >> Norbert >> >>> BTW: I found this nice document: >>> https://ci.inria.fr/pharo-contribution/job/EnterprisePharoBook/ws/Voyage/Voyage.pdf >>> I was mentioned there, thanks! Esteban, if you want, you could change my >>> name, I married and changed my name to Manaa. >>> >>> have a nice weekend >>> Sabine >>> >>> 2015-08-06 15:36 GMT+02:00 NorbertHartl [via Smalltalk] <<a >>> href="x-msg://13/user/SendEmail.jtp?type=node&node=4841464&i=0" >>> target="_top" rel="nofollow" link="external" class="">[hidden email]>: >>> >>>> Sabine, >>>> >>>>> Am 06.08.2015 um 14:49 schrieb Sabine Manaa <[hidden email]>: >>>>> >>>>> Norbert, >>>>> >>>>> I have to come back to your answer. >>>>> >>>>> With the .explain option, I can see, how performance is with and without >>>>> index on the _mongo console_. >>>>> As an example, I see: with index only 2 objects scanned, without: 200. >>>>> Performance is perfect with index. >>>>> >>>>> But _from smalltalk_, it seems to iterate over all objects, also with the >>>>> index set. Slow. >>>>> >>>>> You wrote: "The index will be selected automatically." It seems that it >>>>> does not. >>>> >>>> Usually it does. >>>> >>>>> My question: >>>>> MongoQuery has an attribute named "where" which is filled with the >>>>> mentioned "receipts.receiptDescription". >>>>> Because of the name of this attribute "where" and the slow performance, I >>>>> assume that the mongo classes use the $where command: >>>>> >>>>> http://docs.mongodb.org/manual/reference/operator/query/where/ >>>>> >>>>> Is this right? >>>>> >>>>> In this case with the statement >>>>> Trip selectMany: { 'receipts.receiptDescription' -> 'Tankquittung' } >>>>> asDictionary >>>>> the index would not be set automatically. >>>>> >>>>> "The $where provides greater flexibility, but requires that the database >>>>> processes the JavaScript expression or function for each document in the >>>>> collection. " >>>>> >>>>> Then my question is if the mongo classes support database queries with >>>>> index and if yes, how. >>>>> >>>>> I am very interested in your opinion and I think other users should have >>>>> the same requirements (querying indexed variables) - how did they solve >>>>> this? >>>> The handling of indexes needs to be automatic. The rule of thumb is that >>>> if you use where clause like b = , c = , a= than you need an compound >>>> index in the same order being index(b,c,a). This is handled by the >>>> database when it analyzes the query it tries to find an appropriate index. >>>> Or seeing it from the other side: If you issue a query with index and the >>>> index does not fit the query it is a problem anyway. Are you sure you have >>>> only this one thing in the where query? >>>> >>>> I use e.g. >>>> >>>> COInstalledApp selectOne: { >>>> 'device.id' -> aString. >>>> 'application.__id' -> anApplication voyageId } asDictionary >>>> >>>> on a collection that has approx. 1 Mio. entires and it is fast. I didn't >>>> check with explain but I'll do if I find time :) >>>> >>>> If I were you I would step in the debugger down to the Voyage part after >>>> serialization. Then you have the exact Dictionary that is used to send to >>>> mongo. You can then use this query to do an "explain" on it and that >>>> should show you something. Another thing you can try (although I don't >>>> think makes any difference) is to use the non-javascript query variant. >>>> That would be >>>> >>>> Trip selectMany: { >>>> 'receipts' -> { >>>> 'receiptDescription' -> 'Tankquittung' } asDictionary } >>>> asDictionary >>>> >>>> Norbert >>>> >>>>> Regards >>>>> Sabine >>>>> >>>>> >>>>> 2015-08-04 14:47 GMT+02:00 Sabine Manaa <[hidden email]>: >>>>> >>>>> > >>>>> > Hi Norbert, >>>>> > >>>>> > I didn't want to use "use database" for queries but for defining the >>>>> > index from within smalltalk. But if creating indexes is not supported, >>>>> > I will set the indexes within the mongo console. >>>>> > >>>>> > The explain option is very helpful I did not know this. >>>>> > >>>>> > Your answer was very helpful for me, thanks a lot! >>>>> > Sabine >>>>> > >>>>> > >>>>> > >>>>> > 2015-08-04 10:42 GMT+02:00 NorbertHartl [via Smalltalk] <[hidden >>>>> > email]>: >>>>> >> >>>>> >> Sabine, >>>>> >> >>>>> >> Am 04.08.2015 um 07:08 schrieb Sabine Manaa <[hidden email]>: >>>>> >> >>>>> >> Hi, >>>>> >> >>>>> >> I have 2 questions concerning use of mongoDB classes: >>>>> >> 1) how can I send mongo console commands directly from smalltalk >>>>> >> 2) how to query on an embedded collection with an index >>>>> >> >>>>> >> Model: >>>>> >> I have trips and each trip has an embedded collection of N receipts >>>>> >> like >>>>> >> this: >>>>> >> { "tripName" : "trip 1", >>>>> >> {"receipts" : [ >>>>> >> {"receiptDescription" : "receipt 1" } >>>>> >> {"receiptDescription" : "receipt 2" } >>>>> >> {"receiptDescription" : "receipt 3" } ], >>>>> >> } >>>>> >> >>>>> >> Index: >>>>> >> For quick search, I created an index on the embeded[1] receipts with >>>>> >> this >>>>> >> command at the mongoDB console in a terminal (NOT in smalltalk) >>>>> >> (mongo console starts with mongo in the MongoDB/bin dir): >>>>> >> >>>>> >> db.Trips.createIndex({"receipts.receiptDescription":1}) >>>>> >> >>>>> >> with a command like this in the mongoDB console >>>>> >> >>>>> >> db.Trips.find({"receipts.receiptDescription":"receipt 1"}) >>>>> >> >>>>> >> I get the resulting receipt. >>>>> >> >>>>> >> Before, I have to set the database with "use {databasename}" in thr >>>>> >> mongodb >>>>> >> console >>>>> >> >>>>> >> My questions: >>>>> >> 1) how can I send mongo console commands directly from smalltalk, e.g. >>>>> >> use >>>>> >> database, set index etc. >>>>> >> >>>>> >> >>>>> >> I don't know why you want to use "use database". For queries you don't >>>>> >> need this because you choose the database and collection by using the >>>>> >> smalltalk classes. You can look there if something you need exists. >>>>> >> Creating indexes is not yet supported. I want to do that myself. As >>>>> >> always there seems to be to less people implementing stuff like that. >>>>> >> >>>>> >> Is this possible? >>>>> >> I did not succeed with the mongo command: method, it always returns >>>>> >> "no such >>>>> >> cmd". >>>>> >> >>>>> >> 2) how can I search for a receipt which is indexed as described from >>>>> >> smalltalk? >>>>> >> >>>>> >> >>>>> >> A simple >>>>> >> >>>>> >> Trip selectMany: { 'receipts.receiptDescription' -> 'Tankquittung' } >>>>> >> asDictionary >>>>> >> >>>>> >> should do. You can use just the nested properties form. The index will >>>>> >> be selected automatically. If you are not sure about queries read >>>>> >> about explain [1] to optimize that stuff. >>>>> >> >>>>> >> [1] >>>>> >> http://docs.mongodb.org/manual/reference/method/cursor.explain/#cursor.explain >>>>> >> >>>>> >> Norbert >>>>> >> >>>>> >> >>>>> >> I did not succeed with the description [2] I am not sure if it is >>>>> >> covered by >>>>> >> it. >>>>> >> >>>>> >> Regards >>>>> >> Sabine >>>>> >> >>>>> >> >>>>> >> [1] >>>>> >> http://docs.mongodb.org/manual/core/index-multikey/#index-arrays-with-embedded-documents >>>>> >> [2] http://smallworks.eu/web/blog/2013-07-18-Voyage-advanced-queries >>>>> >> >>>>> >> >>>>> >> >>>>> >> -- >>>>> >> View this message in context: >>>>> >> http://forum.world.st/MongoDB-console-commands-query-embedded-indexed-fields-tp4840882.html >>>>> >> Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com. >>>>> >> >>>>> >> >>>>> >> >>>>> >> >>>>> >> ________________________________ >>>>> >> If you reply to this email, your message will be added to the >>>>> >> discussion below: >>>>> >> http://forum.world.st/MongoDB-console-commands-query-embedded-indexed-fields-tp4840882p4840888.html >>>>> >> To start a new topic under Pharo Smalltalk Users, email [hidden email] >>>>> >> To unsubscribe from MongoDB: console commands? query embedded indexed >>>>> >> fields?, click here. >>>>> >> NAML >>>>> > >>>>> > >>>>> > >>>>> > ________________________________ >>>>> > View this message in context: Re: MongoDB: console commands? query >>>>> > embedded indexed fields? >>>>> > >>>>> > Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com. >>> >>> If you reply to this email, your message will be added to the discussion >>> below: >>> http://forum.world.st/MongoDB-console-commands-query-embedded-indexed-fields-tp4840882p4841238.html >>> To start a new topic under Pharo Smalltalk Users, email <a >>> href="x-msg://13/user/SendEmail.jtp?type=node&node=4841464&i=1" >>> target="_top" rel="nofollow" link="external" class="">[hidden email] >>> To unsubscribe from MongoDB: console commands? query embedded indexed >>> fields?, click here. >>> NAML >> >> >> View this message in context: Re: MongoDB: console commands? query embedded >> indexed fields? >> Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com. > > > > If you reply to this email, your message will be added to the discussion > below: > http://forum.world.st/MongoDB-console-commands-query-embedded-indexed-fields-tp4840882p4841471.html > To start a new topic under Pharo Smalltalk Users, email [hidden email] > To unsubscribe from MongoDB: console commands? query embedded indexed > fields?, click here. > NAML > > > View this message in context: Re: MongoDB: console commands? query embedded > indexed fields? > Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.