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? Regards Sabine 2015-08-07 15:06 GMT+02:00 NorbertHartl [via Smalltalk] < ml-node+s1294792n4841471...@n4.nabble.com>: > > Am 07.08.2015 um 14:53 schrieb Sabine Manaa <[hidden email] > <http:///user/SendEmail.jtp?type=node&node=4841471&i=0>>: > > 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] >> <http://user/SendEmail.jtp?type=node&node=4841238&i=0>>: >> >> 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] >> <http://user/SendEmail.jtp?type=node&node=4841238&i=1>>: >> >> > >> > 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 >> <http://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 >> <http://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 > <http://forum.world.st/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml> > > > ------------------------------ > View this message in context: Re: MongoDB: console commands? query > embedded indexed fields? > <http://forum.world.st/MongoDB-console-commands-query-embedded-indexed-fields-tp4840882p4841464.html> > Sent from the Pharo Smalltalk Users mailing list archive > <http://forum.world.st/Pharo-Smalltalk-Users-f1310670.html> at Nabble.com > <http://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 > ml-node+s1294792n1310670...@n4.nabble.com > To unsubscribe from MongoDB: console commands? query embedded indexed > fields?, click here > <http://forum.world.st/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=4840882&code=bWFuYWEuc2FiaW5lQGdtYWlsLmNvbXw0ODQwODgyfC0xOTE3OTcxOTg5> > . > NAML > <http://forum.world.st/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml> > -- View this message in context: http://forum.world.st/MongoDB-console-commands-query-embedded-indexed-fields-tp4840882p4841592.html Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.