猫鼬模型将多个函数应用于模型对象
Mongoose Model applying multiple functions to a Model Object
我正在使用 Nodejs Expressjs MongoDB 和 Mongoose 为我工作的小型服务应用程序创建 rest API。
我做了所有应用单一简单函数的路由,如 .find()
.findOneAndUpdate() 等
喜欢这个:
router.get('/testTable', function(req, res, next) {
TestModel.find(function (err, testTableEntries) {
if (err) return next(err);
res.send(testTableEntries);
});
});
很简单。但是,如果我想合并更多的函数然后只需要一个 mongo 函数 .find()
怎么办?
如果我想怎么办:
.find().pretty()
或者如果要汇总,请进行一些计数:
.find().count()
.find({"fieldName": "How many have this value?"}).count()
.find({"fieldName": "How many have this value?"}).count().pretty()
我试过类似的方法:
router.get('/testTable', function(req, res, next) {
TestModel.find(function (err, testTableEntries) {
if (err) return next(err);
res.send(testTableEntries);
}).count();
});
或者你可以建议有承诺的无回调解决方案(比如 Bluebird),我的第一个想法是:
router.get('/testTable', function(req, res, next) {
TestModel.find(function (err, next) {
if (err) return next(err);
}).then(function (req, res, next) {
res.send(testTableEntries);
}).catch(function (err, next) {
if (err) return next(err);
});
});
也许有一些 Mongoose 内置函数可以解决它,我将不胜感激,但也将有助于了解如何在 Mongoose 模型上一个接一个地调用链中的函数。
非常感谢您的任何建议和想法!
嗯,你总是可以直接调用 .count()
:
Test.count({"fieldName": "How many have this value?"},function(err,count) {
// count is the counted results
});
当然,在 mongoose 中从 `.find() 返回的对象是一个数组,所以:
Test.find({"fieldName": "How many have this value?"},function(err,results) {
var count = results.length;
})
或者对于 "chaining" 你可以用 "query" .count()
Test.find({"fieldName": "How many have this value?"})
.count().exec(function(err,results) {
})
如果您想要 "counts" 所有可能的 "fieldName" 值,请使用 .aggregate()
:
Test.aggregate([
{ "$group": {
"_id": "fieldName",
"count": { "$sum": 1 }
}},
],function(err,results) {
// each result has a count
});
您通常需要开始考虑 "working inside" 异步编程中的回调,而不是 "returning" 您对 "outside" 变量的方法调用的结果。
我正在使用 Nodejs Expressjs MongoDB 和 Mongoose 为我工作的小型服务应用程序创建 rest API。
我做了所有应用单一简单函数的路由,如 .find() .findOneAndUpdate() 等 喜欢这个:
router.get('/testTable', function(req, res, next) {
TestModel.find(function (err, testTableEntries) {
if (err) return next(err);
res.send(testTableEntries);
});
});
很简单。但是,如果我想合并更多的函数然后只需要一个 mongo 函数 .find()
怎么办?如果我想怎么办:
.find().pretty()
或者如果要汇总,请进行一些计数:
.find().count()
.find({"fieldName": "How many have this value?"}).count()
.find({"fieldName": "How many have this value?"}).count().pretty()
我试过类似的方法:
router.get('/testTable', function(req, res, next) {
TestModel.find(function (err, testTableEntries) {
if (err) return next(err);
res.send(testTableEntries);
}).count();
});
或者你可以建议有承诺的无回调解决方案(比如 Bluebird),我的第一个想法是:
router.get('/testTable', function(req, res, next) {
TestModel.find(function (err, next) {
if (err) return next(err);
}).then(function (req, res, next) {
res.send(testTableEntries);
}).catch(function (err, next) {
if (err) return next(err);
});
});
也许有一些 Mongoose 内置函数可以解决它,我将不胜感激,但也将有助于了解如何在 Mongoose 模型上一个接一个地调用链中的函数。
非常感谢您的任何建议和想法!
嗯,你总是可以直接调用 .count()
:
Test.count({"fieldName": "How many have this value?"},function(err,count) {
// count is the counted results
});
当然,在 mongoose 中从 `.find() 返回的对象是一个数组,所以:
Test.find({"fieldName": "How many have this value?"},function(err,results) {
var count = results.length;
})
或者对于 "chaining" 你可以用 "query" .count()
Test.find({"fieldName": "How many have this value?"})
.count().exec(function(err,results) {
})
如果您想要 "counts" 所有可能的 "fieldName" 值,请使用 .aggregate()
:
Test.aggregate([
{ "$group": {
"_id": "fieldName",
"count": { "$sum": 1 }
}},
],function(err,results) {
// each result has a count
});
您通常需要开始考虑 "working inside" 异步编程中的回调,而不是 "returning" 您对 "outside" 变量的方法调用的结果。