Как получить все количество Мангуст модели?
как я могу узнать количество модели, что данные были сохранены? существует метод Model.count()
, но это, кажется, не работает.
var db = mongoose.connect('mongodb://localhost/myApp');
var userSchema = new Schema({name:String,password:String});
userModel =db.model('UserList',userSchema);
var userCount = userModel.count('name');
userCount
- это объект, который вызванный метод может получить реальный count
?
спасибо
5 ответов:
код ниже работает. Обратите внимание на использование графа.
var mongoose = require('mongoose'); var db = mongoose.connect('mongodb://localhost/myApp'); var userSchema = new mongoose.Schema({name:String,password:String}); var userModel =db.model('userlists',userSchema); var anand = new userModel({ name: 'anand', password: 'abcd'}); anand.save(function (err, docs) { if (err) { console.log('Error'); } else { userModel.count({name: 'anand'}, function(err, c) { console.log('Count is ' + c); }); } });
причина, по которой ваш код не работает, заключается в том, что функция count является асинхронной, она не синхронно возвращает значение.
пример использования:
userModel.count({}, function( err, count){ console.log( "Number of users:", count ); })
вы должны дать объект в качестве аргумента
userModel.count({name: "sam"});
или
userModel.count({name: "sam"}).exec(); //if you are using promise
или
userModel.count({}); // if you want to get all counts irrespective of the fields
коллекция.граф является устаревшим и будет удален в будущих версиях. Используйте коллекцию.countDocuments или коллекции. estimatedDocumentCount.
userModel.countDocuments(query).exec((err, count) => { if (err) { res.send(err); return; } res.json({ count: count }); });
как уже было сказано, ваш код не будет работать так, как есть. Решение для этого будет использовать функцию обратного вызова, но если вы думаете, что это приведет вас к "обратному аду", вы можете искать "обещания".
возможное решение с помощью функции обратного вызова:
//DECLARE numberofDocs OUT OF FUNCTIONS var numberofDocs; userModel.count({}, setNumberofDocuments); //this search all DOcuments in a Collection
если вы хотите найти количество документов на основе запроса, вы можете сделать это:
userModel.count({yourQueryGoesHere}, setNumberofDocuments);
setNumberofDocuments-это отдельная функция:
var setNumberofDocuments = function(err, count){ if(err) return handleError(err); numberofDocs = count; };
теперь вы можете получить количество документов в любом месте с getFunction:
function getNumberofDocs(){ return numberofDocs; } var number = getNumberofDocs();
кроме того, вы используете эту асинхронную функцию внутри синхронной, используя обратный вызов, например:
function calculateNumberOfDoc(someParameter, setNumberofDocuments){ userModel.count({}, setNumberofDocuments); //this search all DOcuments in a Collection setNumberofDocuments(true); }
надеюсь, что это может помочь другим. :)