Как получить все количество модели мангуста?
как я могу узнать количество модели, данные которой были сохранены? существует метод 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
является объектом, который называется методом, может получить real 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);
}
надеюсь, что это может помочь другим. :)