我有一个MongoDB查询,例如
// Get scoreboard of challenge
response.aggregate = await ScoreBoardModel.aggregate([
{ $match: { challenge_id: mongoose.Types.ObjectId(req.body.challenge_id) } },
{ $group: { _id: '$user_id', value: { $sum: '$value' } } },
]);
Run Code Online (Sandbox Code Playgroud)
哪个输出像
[
{
"_id": "5b762887b6e3a91c60c01718",
"value": 4300
},
{
"_id": "5b8b41f10186400163d0df83",
"value": 6800
},
{
"_id": "5b762590b6e3a91c60c01713",
"value": 2023
}
]
Run Code Online (Sandbox Code Playgroud)
但我想执行此查询,如下所示:
response.aggregate = await ScoreBoardModel.aggregate([
{ $match: { challenge_id: mongoose.Types.ObjectId(req.body.challenge_id) } },
{ $lookup: {
from: 'appusers',
let: { 'user_id': '$user_id' },
pipeline: [{ $match: { $expr: { $eq: …
Run Code Online (Sandbox Code Playgroud) 我有一个查询,输出如下。
return ChallengeModel.aggregate([
{ $match: { is_processed: false,} },
{ $lookup: {
from: 'scoreboards',
let: { 'challengeId': '$_id' },
pipeline: [{ $match: { $expr: { $eq: [ '$challenge_id', '$$challengeId' ]}} }],
as: 'scoreboards'
} }
]);
Run Code Online (Sandbox Code Playgroud)
输出:
{
"_id": "5b9679db0a3d61258aa3ffc3",
"voucher_paid_by": "issuer",
"start_date": "2018-09-03T00:00:00.000Z",
"end_date": "2018-09-09T23:59:00.000Z",
"accept_by_date": "2018-09-03T12:00:00.000Z",
"scoreboards": [
{
"_id": "5b9757c68a6f1615d8e704d3",
"user_id": "5b9667200a3d61258aa3ff9f",
"date": "2018-09-01T00:00:00.000Z",
"value": 2
},
{
"_id": "5b9757c68a6f1615d8e704d3",
"user_id": "5b9667200a3d61258aa3ff9f",
"date": "2018-09-02T00:00:00.000Z",
"value": 6
},
{
"_id": "5b9757c68a6f1615d8e704d3",
"user_id": "5b9667200a3d61258aa3ff9f",
"date": "2018-09-03T00:00:00.000Z",
"value": 5
}, …
Run Code Online (Sandbox Code Playgroud) 所以这里是我的 route.js 文件,它处理所有的路由。
// Import post controller
const PostController = require('../controllers/post');
// Call post controller for API
router.post('/posts', PostController.create);
Run Code Online (Sandbox Code Playgroud)
然后控制器中有 post.js 文件,它导出 Post 类。
const PostModel = require('../models/post');
class Post
{
async create ()
{
response = {};
let posts = await PostModel.find({});
response.additionalInfo = this.getAdditionalInfo();
res.status(200).send({response});
}
getAdditionalInfo ()
{
// returns some data for users and something
}
}
module.exports = new Post();
Run Code Online (Sandbox Code Playgroud)
现在我的问题是如何getAdditionalInfo()
从 create 方法调用?因为如果我尝试this.getAdditionalInfo()
我会undefined
出错。
这是如何create
使用:
router.post('/posts', PostController.create);
Run Code Online (Sandbox Code Playgroud)