小编paw*_*392的帖子

mongodb中的$ first

我有一个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)

mongodb node.js aggregation-framework

5
推荐指数
1
解决办法
181
查看次数

MongoDB 过滤 $lookup 具有日期范围的文档

我有一个查询,输出如下。

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)

mongodb node.js aggregation-framework

5
推荐指数
1
解决办法
1795
查看次数

这在 NodeJS 中是未定义的

所以这里是我的 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)

node.js ecmascript-6

4
推荐指数
1
解决办法
2710
查看次数