12

I'm writing a server side code using node.js, I'm trying to get the MongoDB collection size using count method which is not working.

This is my code

var mongo = require('mongodb');
var host =  "127.0.0.1";
var port = mongo.Connection.DEFAULT_PORT;

function getStock(name, callback) {

    var db = new mongo.Db("testDB", new mongo.Server(host, port, {}));
    db.open (function(error){
        console.log("We are connected! " + host + ":" +port);

        db.collection("stocks", function(error, collection){
            console.log("We have a collection");
            **var numOfDocs = db.collection('stocks').count()**
            **console.log("The num of  Docs in our collection is: ",numOfDocs)**
            collection.find({"name":name.toString()}, function(error, cursor) {
                cursor.toArray(function(error, stocks) {
                    if (stocks.length==0) {
                        //console.log("No Stocks found!");
                        callback(false);
                    }
                    else {
                        callback(stocks[0]);
                        //console.log("Found a stock -> ",stocks[0]);
                    }
                });
            });


        });
    });
}

2 Answers 2

7

.count() is an asynchronous function, just like .find() is.

Try the following code:

collection.count({}, function(error, numOfDocs) {
    console.log('I have '+numOfDocs+' documents in my collection');
    // ..
});

The first argument to .count() should be a search query. Since you want to count all documents, I'm passing an empty object {} as a search query.

Sign up to request clarification or add additional context in comments.

8 Comments

What about the size() method?
@user3502786 there is no size() method in MongoDB. You can use .stats() methods, but it's asynchronous too.
@user3502786 the thing is, all io-related methods in node.js are asynchronous.
Is it going to give me the same number?
Yes. But it'll give you a lot of other information.
|
1

Since mongo 4, count() is deprecated. You should use countDocuments() instead:

MongoDB drivers compatible with the 4.0 features deprecate their respective cursor and collection count() APIs in favor of new APIs for countDocuments() and estimatedDocumentCount(). For the specific API names for a given driver, see the driver documentation.

db.orders.countDocuments({})

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.