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.

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.

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] <
ml-node+s1294792n4841238...@n4.nabble.com>:

> 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.
> >>
> >>
> >>
> >>
> >> ________________________________
> >> 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
> 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-tp4840882p4841464.html
Sent from the Pharo Smalltalk Users mailing list archive at Nabble.com.

Reply via email to