Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Parrots collection? #3

Open
cjknowles opened this issue Jun 1, 2015 · 41 comments
Open

Parrots collection? #3

cjknowles opened this issue Jun 1, 2015 · 41 comments

Comments

@cjknowles
Copy link

FIND
Exercise 3 of 9
Use the parrots collection to find all documents where age
is greater than the first argument passed to your script.

Hey --

I just tried this tutorial and hit a wall on exercise three, as I do not have a parrots collection?

I can see this is a fresh repo, sorry if I've jumped the gun!

@evanlucas
Copy link
Owner

The parrots collection is created by the exercise

@evanlucas
Copy link
Owner

I realized that the HINTS for the FIND problem could have been better. Went ahead and added additional info in 9def6d5.

@cjknowles
Copy link
Author

I've tried 'show dbs' from the mongo shell after running the exercise; but I cannot see the collection or database.

Also tried cheating and just running the solution and it just gave a blank [] as the result.

The problem must be my setup?

@evanlucas
Copy link
Owner

Yea, the exercise deletes the collection on cleanup. After you connected via the mongo shell, did you run use learnyoumongo? After that, try show collections

@evanlucas
Copy link
Owner

Also, how did you run the solution?

@cjknowles
Copy link
Author

I ran using 'node ... path to solution' and I think when I did this mongo created an empty learnyounode database.

I've just dropped that empty database and tried opening the exercise again, thinking that it may be blocking a fresh one being made; and then in a different window tried 'mongo, use learnyoumongo, show collections' and there is still no content.

@evanlucas
Copy link
Owner

Yea, there won't be any content because it gets cleaned up after the exercise is done running.

@evanlucas
Copy link
Owner

try using learnyoumongo verify file to verify the solution instead

@cjknowles
Copy link
Author

Alright, I can get it to work but I need to go back the run Exercise 1 MONGOD again.

If I go straight into learnyoumongo and select the FIND exercise, and then learnyoumongo verify file it fails, with an empty response from mongo and an error...

module.js:338
    throw err;
          ^
Error: Cannot find module 'mongodb'

I know mongo is running as if I use systemctl status mongod I get status Active: active (running).

But if I go back and run Exercise 1 MONGOD again, and then try the verify on Exercise 3's solution... it works.

Not sure if this intended or a problem in the code for Ex3? If it is intended it will be worth noting that the exercises should run in one sequential session.

Also, to explain a bit of more of why I struggled. I usually read the problem and then try to fix it in isolation of verify, and then when I have what looks like a solution I'll run it against verify and see if I win -- hence the confusion with the parrot collection, I wanted to code against it as a target but it wasn't there.

@evanlucas
Copy link
Owner

strange, the mongodb module should be bundled so I am assuming that the error is being thrown from the file that you ran against verify?

@cjknowles
Copy link
Author

I am verifying the solution like a good cheat...

~/.npm/learnyoumongo/1.1.4/package/exercises/find/solution/solution.js

@jessecogollo
Copy link
Contributor

@mr-cjk did you run "npm install mongodb"?
other thing are you can paste the code in a gist.

@EightArmCode
Copy link

I am having a lot of problems finishing these modules. It appears there is configuration/setup to be done every single time that is not clearly explained.

@evanlucas
Copy link
Owner

@EightArmCode can you give me some more details on the issues you are having?

@nalexiou
Copy link

I am also having trouble with the FIND exercise.

I run this command: learnyoumongo run [solution.js] and get the following error:
....
/home/ubuntu/.nvm/v0.10.35/lib/node_modules/learnyoumongo/exercises/find/exercise.js:37
db.collection('parrots').remove({}, function(err) {
^
TypeError: Cannot call method 'collection' of undefined
...

Am I supposed to create a solution.js file with the code? I tried this but did not seem to work (I even copied the solution of the exercise and it did not seem to make a difference).

If you can provide some insight/help, I would appreciate it.

Please feel free to let me know if you need additional information regarding the errors I get.

Thank you.

Nikolaos

@evanlucas
Copy link
Owner

Can you share the code you ran to get that error?

@nalexiou
Copy link

Hi Evan,

I actually was able to figure it out. Basically, I had to run the command at the terminal like this:

learnyoumongo run solution.js (once I got rid of the brackets from the solution.js filename, it worked!)

Maybe it would be helpful to note this somewhere.

-Nikolaos

ORIGINAL COMMENT.....
Yes, sure. Here is the code that I placed in solution.js:

var mongo = require('mongodb').MongoClient
var age = parseInt(process.argv[2])

var url = 'mongodb://localhost:27017/learnyoumongo'

mongo.connect(url, function(err, db) {
  if (err) throw err
  var parrots = db.collection('parrots')
  parrots.find({
    age: {
      $gt: age
    }
  }).toArray(function(err, docs) {
    if (err) throw err
    console.log(docs)
    db.close()
  })
})

@SmileeYang
Copy link

Hi all, I'm new in Node.js and learning mongoDB just today morning, and here comes problem with exercise 3 also...
Following is my mongoFind.js

var mongo = require('mongodb').MongoClient
var url = 'mongodb://localhost:27017/learnyoumongo'
var age = parseInt(process.argv[2])

mongo.connect(url, function (err, db) {
    if (err) throw err
    db.collection('parrots').find({ 
        age: {
            $gt: +age
        } 
    }).toArray(function (err, documents) {
        if (err) throw err
        console.log(documents)
        db.close()
    })
})

And I run: learnyoumongo verify mongoFind.js
but always got

    /usr/local/lib/node_modules/learnyoumongo/node_modules/mongodb/lib/server.js:235
    process.nextTick(function() { throw err; })
                                    ^

    TypeError: Cannot read property 'collection' of undefined
        at Exercise.<anonymous> (/usr/local/lib/node_modules/learnyoumongo/exercises/find/exercise.js:37:5)
        at next (/usr/local/lib/node_modules/learnyoumongo/node_modules/workshopper-exercise/exercise.js:260:17)
        at Exercise.end (/usr/local/lib/node_modules/learnyoumongo/node_modules/workshopper-exercise/exercise.js:266:5)
        at Workshopper.end (/usr/local/lib/node_modules/learnyoumongo/node_modules/workshopper/workshopper.js:191:12)
        at Workshopper.done (/usr/local/lib/node_modules/learnyoumongo/node_modules/workshopper/workshopper.js:323:19)
        at Exercise.<anonymous> (/usr/local/lib/node_modules/learnyoumongo/node_modules/workshopper-exercise/exercise.js:149:14)
        at /usr/local/lib/node_modules/learnyoumongo/node_modules/workshopper-exercise/exercise.js:136:16
        at /usr/local/lib/node_modules/learnyoumongo/exercises/find/exercise.js:20:21
        at /usr/local/lib/node_modules/learnyoumongo/node_modules/mongodb/lib/mongo_client.js:269:20
        at /usr/local/lib/node_modules/learnyoumongo/node_modules/mongodb/lib/db.js:225:14

Even I tried solution.js in ./learnyoumongo/exercises/find/solution/solution.js with learnyoumongo verify solution.js, always return above error message... Please help me! Thanks!!!

@rulanfuse
Copy link

It seems it's necessary to run "npm install mongodb" before doing exercise 3.

@SmileeYang
Copy link

Hello @rulanfuse I've tried your suggestion and run npm install mongodb before verify Exercise 3 with my mongoFind.js but still got error message below

    /usr/local/lib/node_modules/learnyoumongo/exercises/find/exercise.js:37
    db.collection('parrots').remove({}, function(err) {
        ^

    TypeError: Cannot read property 'collection' of undefined
        at Exercise.<anonymous> (/usr/local/lib/node_modules/learnyoumongo/exercises/find/exercise.js:37:5)
        at next (/usr/local/lib/node_modules/learnyoumongo/node_modules/workshopper-exercise/exercise.js:260:17)
        at Exercise.end (/usr/local/lib/node_modules/learnyoumongo/node_modules/workshopper-exercise/exercise.js:266:5)
        at Workshopper.end (/usr/local/lib/node_modules/learnyoumongo/node_modules/workshopper/workshopper.js:191:12)
        at Workshopper.done (/usr/local/lib/node_modules/learnyoumongo/node_modules/workshopper/workshopper.js:323:19)
        at Exercise.<anonymous> (/usr/local/lib/node_modules/learnyoumongo/node_modules/workshopper-exercise/exercise.js:149:14)
        at /usr/local/lib/node_modules/learnyoumongo/node_modules/workshopper-exercise/exercise.js:136:16
        at Exercise.<anonymous> (/usr/local/lib/node_modules/learnyoumongo/node_modules/workshopper-exercise/filecheck.js:10:14)
        at FSReqWrap.oncomplete (fs.js:82:15)

I think maybe was mongodb install path issue, I ran npm install mongodb and it goes to

    > kerberos@0.0.14 install /Users/smilee_yang/Desktop/Project/side-project/Nodejs/Class/node_modules/mongodb/node_modules/mongodb-core/node_modules/kerberos
    > (node-gyp rebuild) || (exit 0)
    CXX(target) Release/obj.target/kerberos/lib/kerberos.o
    CXX(target) Release/obj.target/kerberos/lib/worker.o
    CC(target) Release/obj.target/kerberos/lib/kerberosgss.o
    CC(target) Release/obj.target/kerberos/lib/base64.o
    CXX(target) Release/obj.target/kerberos/lib/kerberos_context.o
    SOLINK_MODULE(target) Release/kerberos.node
    mongodb@2.0.43 node_modules/mongodb
    ├── readable-stream@1.0.31 (isarray@0.0.1, string_decoder@0.10.31, inherits@2.0.1, core-util-is@1.0.1)
    ├── es6-promise@2.1.1
    └── mongodb-core@1.2.12 (bson@0.4.12, kerberos@0.0.14)

Is it? And then I try again, but this time learnyoumongo return another error message...

    /usr/local/lib/node_modules/learnyoumongo/node_modules/mongodb/lib/server.js:235
    process.nextTick(function() { throw err; })
                                    ^
    TypeError: Cannot read property 'collection' of undefined
    at Exercise.<anonymous> (/usr/local/lib/node_modules/learnyoumongo/exercises/find/exercise.js:37:5)
    at next (/usr/local/lib/node_modules/learnyoumongo/node_modules/workshopper-exercise/exercise.js:260:17)
    at Exercise.end (/usr/local/lib/node_modules/learnyoumongo/node_modules/workshopper-exercise/exercise.js:266:5)
    at Workshopper.end (/usr/local/lib/node_modules/learnyoumongo/node_modules/workshopper/workshopper.js:191:12)
    at Workshopper.done (/usr/local/lib/node_modules/learnyoumongo/node_modules/workshopper/workshopper.js:323:19)
    at Exercise.<anonymous> (/usr/local/lib/node_modules/learnyoumongo/node_modules/workshopper-exercise/exercise.js:149:14)
    at /usr/local/lib/node_modules/learnyoumongo/node_modules/workshopper-exercise/exercise.js:136:16
    at /usr/local/lib/node_modules/learnyoumongo/exercises/find/exercise.js:20:21
    at /usr/local/lib/node_modules/learnyoumongo/node_modules/mongodb/lib/mongo_client.js:269:20
    at /usr/local/lib/node_modules/learnyoumongo/node_modules/mongodb/lib/db.js:225:14

Oh my god... Please help me...

@Seryal85
Copy link

I have same problem

@ashtonian
Copy link

I have similar problem.

I've ran

npm install mongodb

and tried running

learnyoumongo verify solution.js 

only to find

TypeError: Cannot read property 'collection' of undefined
    at Exercise.<anonymous> (/usr/local/lib/node_modules/learnyoumongo/exercises/find/exercise.js:37:5)
    at next (/usr/local/lib/node_modules/learnyoumongo/node_modules/workshopper-exercise/exercise.js:260:17)
    at Exercise.end (/usr/local/lib/node_modules/learnyoumongo/node_modules/workshopper-exercise/exercise.js:266:5)
    at Workshopper.end (/usr/local/lib/node_modules/learnyoumongo/node_modules/workshopper/workshopper.js:191:12)
    at Workshopper.done (/usr/local/lib/node_modules/learnyoumongo/node_modules/workshopper/workshopper.js:323:19)
    at Exercise.<anonymous> (/usr/local/lib/node_modules/learnyoumongo/node_modules/workshopper-exercise/exercise.js:149:14)
    at /usr/local/lib/node_modules/learnyoumongo/node_modules/workshopper-exercise/exercise.js:136:16
    at Exercise.<anonymous> (/usr/local/lib/node_modules/learnyoumongo/node_modules/workshopper-exercise/filecheck.js:10:14)
    at FSReqWrap.oncomplete (fs.js:82:15)

@bapinney
Copy link

bapinney commented Nov 9, 2015

I ran into this problem, too. At first I presumed there was just some error in the js file I was trying to verify. However, no matter what I commented out (even if I commented everything out and hand a blank file), the solution would still fail. It made me realize that it's probably not my code.

I finally did what mr-cjk mentioned he did in his post, above. I ran learnyoumongo again, selected the first exercise, and hit enter. Then, without doing anything else, I ran "learnyoumongo verify mongo-find.js" and exercise 3 finally passed (despite it failing before, despite I did not modify the .js file at all afterwards, and despite exercise 1 being the most recent exercise selected in learnyoumongo).

Edit: Just realized that, although my file for exercise 3 PASSES when I do those steps, learnyoumongo marks exercise 1 as passing and not exercise 3 (which would make sense since that was the last exercise I selected when I tried the method mr-cjk mentioned).

@ghost
Copy link

ghost commented Nov 23, 2015

I was having an issue with step 3 as well, until reading an answer on SO that db.close() needs to be inside a callback, like toArray. Posting link to SO here for others who may be stuck on this step.

https://stackoverflow.com/questions/31699962/simple-mongodb-query-find-item-age-10-learnyoumongo-find-function

@atan77
Copy link

atan77 commented Dec 18, 2015

I had a similar problem, but finally realised that the square brackets in the verify command weren't necessary. Having come from learnyounode, I noticed the difference in verify commands and assumed that the square brackets were necessary. It might be worth removing the square brackets from the instructions.

@Maroo-b
Copy link

Maroo-b commented Jan 4, 2016

For anyone having problem
"TypeError: Cannot read property 'collection' of undefined"

You have to start mongodb server in another terminal with this command:
mongod --port 27017 --dbpath=./data --nojournal

Then verify the file.

I hope this will help anyone.

@savokiss
Copy link

Hi all, I have the same problem and stucked in exercise 3.But then i realized it wasn't my fault.So I go to exercise 1 and do it again, then exercise 2 and then exercise 3 and it works!
May be it has some connections between them, and you have to run them continuously!

Note that --nojournal and db.close() are also important~

@URobert
Copy link

URobert commented Mar 18, 2016

The solution is already provided above by @nalexiou . However, for those running into:
"TypeError: Cannot read property 'collection' of undefined" here are some tips:

1)Make sure in another terminal MongoDb is running (see @Maroo-b 's answer)
2)Make sure you are trying to verify the right file name. I know this is very basic but hey, it happens to all of us every now and then. Uppercase or lowercase in the file name matters ofc (so does the extention).
3)In case you are wondering on what $gt is (and if your new to Mongo like me, you probably are): https://docs.mongodb.org/manual/reference/operator/query/gt/

And lastly another very basic advice: use console logs when stuck, even console.log("Connection succesful"); right after your connection etc. - just remember to wipe them out when you are doing the final check with `learnyoumongo verify" so the actual answer matches the expected outcome.

Hope this helps someone, GL & HF.

@bumbeishvili
Copy link

bumbeishvili commented May 7, 2016

I was having same problem:
TypeError: Cannot read property 'collection' of undefined

@Maroo-b and @atan77 comments helped me.

so here is steps if anyone having this problem:

  1. ensure you start mongodb on port 27017 with this command from first bash window:
    mongod --port 27017 --dbpath=./data --nojournal

  2. my solution.js looks likes this

var mongo = require("mongodb").MongoClient;


mongo.connect('mongodb://localhost:27017/learnyoumongo',function(err,db){
    if(err) console.log(err);

    var parrots = db.collection('parrots');
    var arg = parseInt(process.argv[2]);

    var result = parrots.find({age:{$gt:arg}});

    result.toArray(function(err,docs){
        if(err) console.log(err);
        console.log(docs);
        db.close();
    });

});
  1. run this command from second bash window to verify solution (without square brackets)
    learnyoumongo verify solution.js

@ygautomo
Copy link

ygautomo commented Jun 5, 2016

I have pass the exam 3, with the result.

[ { _id: 5753ba9f84bd376d11a4ebd8, name: 'Jenny', age: 10 } ]

But i've checked on mongo shell using this command

> db
learnyoumongo
> show collections
parrots
system.indexes
> db.parrots.count()
0
> db.system.indexes.count()
1

So actually there is no document in collection parrots?
Where should i check the data?

@evanlucas
Copy link
Owner

The data is removed after the exercise is completed. Thanks!

@kristianjaeger
Copy link

I'm seeing the same issue:
"> show databases
admin (empty)
learnyoumongo (empty)
local 0.078GB
test (empty)"

The entire learnyoumongo db is empty. Is there a way to repopulate this db? Thanks.

@JoeDoyle23
Copy link
Collaborator

Hi @kristianjaeger,

As mentioned above, the collection only exists when the exercise is being run, and deleted when it finishes.

Longer term, it might make sense to populate the database as a step when we test che connection in the first lesson, that way folks can use normal MongoDB tooling to inspect the database to see what they are working with.

@kristianjaeger
Copy link

@JoeDoyle23 Yes, that would be great. Right now, it's difficult to debug one's code as it stands or inspect the database itself.

@therealcode
Copy link

I haven't been able to get this to work - even using the solution.js provided here.

I can start the server just fine with --nojournal. When I shell into mongo and type:
> db
test
> show collections
(blank)

It seems there aren't any sessions running... I went back and completed exercise 1, verified, and 2, then verifired just fine. I am not able to get past 3 for the life of me...

*** I also tried using npm install mongod in the working directory ***

@midori0507
Copy link

Hey guys, the issue happen with latest version of mongodb, try to use another version, remove node_modules and
npm install mongodb@2.2.33

@mat-singh
Copy link

After MongoDB 3.0, the hints and solutions are now obsolete. The main difference is, you can't specify the db name along with url, but have to use the client's db function to associate. Ex:
const mongo = require('mongodb').MongoClient
mongo.connect(url, function(err, client) {
const db = client.db('learnyoumongo');
// now use db as you would normally use
})
The link to solutions for latest version of MongoDB are present here:
#64

@SQLMD
Copy link

SQLMD commented Feb 11, 2018

Thank You! I've been going crazy trying to figure this out..

@NinemillaKA
Copy link

when i run: learnyoumongo verify find.js
i get this
/home/ubuntu/workspace/node_modules/mongodb/lib/mongo_client.js:814
throw err;
^

TypeError: db.collection is not a function
at mongo.connect (/home/ubuntu/workspace/find.js:8:32)
at args.push (/home/ubuntu/workspace/node_modules/mongodb/lib/utils.js:404:72)
at /home/ubuntu/workspace/node_modules/mongodb/lib/mongo_client.js:271:5
at connectCallback (/home/ubuntu/workspace/node_modules/mongodb/lib/mongo_client.js:950:5)
at /home/ubuntu/workspace/node_modules/mongodb/lib/mongo_client.js:811:11
at _combinedTickCallback (internal/process/next_tick.js:73:7)
at process._tickCallback (internal/process/next_tick.js:104:9)

Your submission results compared to the expected:

             ACTUAL                                 EXPECTED                

────────────────────────────────────────────────────────────────────────────────

"" != "[ { _id: 5a846f7fcbad8a21a813b260, name: 'Jenny', age: 10 } ]"
!= ""

────────────────────────────────────────────────────────────────────────────────

✗ Submission results did not match expected!

FAIL

Your solution to FIND didn't pass. Try again!

Someone can help me to solve this? thanks...

@mat-singh
Copy link

NinemillaKA, did you use the client's db function to associate the database, before getting to the collection? The code is present two comments above....

@Tailsxky
Copy link

@midori0507

Solved my issue, thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests