首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mongodb聚合2个表,其中链接表上至少有一个条目[nodejs]

mongodb聚合2个表,其中链接表上至少有一个条目[nodejs]
EN

Stack Overflow用户
提问于 2021-07-21 14:05:26
回答 2查看 51关注 0票数 0

我有两个表,我想提取至少有一个共享对象的所有标记。我也需要在过去7天内创建它。

我不擅长集训。有人能帮忙吗?

当在最后7天内至少有一个共享(表2) createdAt时,检索标记(表1)

在下面的示例中,只应该检索tagId 3和4。Am使用nodejs

股份:

  • _id: 1,tagId: 3,createdAt: 21-7月
  • _id: 2,tagId: 4,createdAt: 21-Jul
  • _id: 3,tagId: 4,createdAt: 21-Jul

标签:

  • _id: 3
  • _id: 4
  • _id: 5
EN

回答 2

Stack Overflow用户

发布于 2021-07-21 14:47:01

您可以使用聚合$lookup运算符,然后使用$match过滤掉在过去7天内没有创建的

代码语言:javascript
复制
db.tags.aggregate([
  { $lookup: 
    { 
      from: "shares", 
      localField: "_id", 
      foreignField: "tagId", 
      as: "shares" 
    } 
  }, 
  { $project:
    {
      name:1,
      createdAt:"$shares.createdAt"
    }
  }, 
  {$unwind:"$createdAt"}, 
  { $match: 
    { $expr: 
      { $gte: [
                {"$dateFromString": {"dateString": "$createdAt"}},
                { $subtract:["$$NOW", 7*24*60*60*1000]}
              ] 
        
      } 
    }
  }
])
票数 0
EN

Stack Overflow用户

发布于 2021-07-26 07:25:28

这个聚合查询$lookup操作符,然后在$lookup中过滤掉在过去7天中创建的记录。

代码语言:javascript
复制
db.tags.aggregate([
  {
    '$lookup': {
      'from': 'share', 
      'let': {
        'tag_id': '$_id'
      }, 
      'pipeline': [
        {
          '$match': {
            '$expr': {
              '$and': [
                {
                  '$eq': [
                    '$tagId', '$$tag_id'
                  ]
                }, {
                  '$gte': [
                    {
                      '$dateFromString': {
                        'dateString': '$createdAt'
                      }
                    }, {
                      '$subtract': [
                        '$$NOW', 7 * 24 * 60 * 60 * 1000
                      ]
                    }
                  ]
                }
              ]
            }
          }
        }
      ], 
      'as': 'shares'
    }
  }, {
    '$match': {
      'shares.0': {
        '$exists': true
      }
    }
  }
])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68470986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档