> Am 07.08.2015 um 14:53 schrieb Sabine Manaa <manaa.sab...@gmail.com>: > > 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 > > <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] <[hidden email] > <x-msg://13/user/SendEmail.jtp?type=node&node=4841464&i=0>>: > 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/ >> <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 <http://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 >> >> >> >> <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 >> >> >> >> <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 >> >> <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 >> >> >> >> <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 >> >> >> >> <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 > > <http://forum.world.st/MongoDB-console-commands-query-embedded-indexed-fields-tp4840882p4841238.html> > To start a new topic under Pharo Smalltalk Users, email [hidden email] > <x-msg://13/user/SendEmail.jtp?type=node&node=4841464&i=1> > To unsubscribe from MongoDB: console commands? query embedded indexed > fields?, click here <applewebdata://0FF8665B-B528-4730-8147-3BAABD7C79BF>. > 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/>.