首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >聚合函数2与查找mongodb匹配

聚合函数2与查找mongodb匹配
EN

Stack Overflow用户
提问于 2020-06-01 19:11:03
回答 1查看 105关注 0票数 0
代码语言:javascript
复制
db.setting.aggregate([
  {
    $match: {
      status: true,
      deleted_at: 0,
      _id: {
        $in: [
          ObjectId("5c4ee7eea4affa32face874b"),
          ObjectId("5ebf891245aa27c290672325")
        ]
      }
    }
  },
  {
    $lookup: {
      from: "site",
      localField: "_id",
      foreignField: "admin_id",
      as: "data"
    }
  },
  {
    $project: {
      name: 1,
      status: 1,
      numberOfRecord: {
        $size: "$data"
      }
    }
  },
  {
    $sort: {
      numberOfRecord: 1
    }
  }
])

我想获取的记录和记录的数量大于等于2020-01-01试图添加下面的代码,但没有成功。

我怎样才能使这个正确,请提前指导谢谢。这里是游乐场https://mongoplayground.net/p/GU8WbTVqo2I

代码语言:javascript
复制
{
    $match: {
      "data.createdAt": {
        $gte: new Date("2020-01-01")
      }
    }
  },

输出应该是

代码语言:javascript
复制
[
  {
    "_id": ObjectId("5ebf891245aa27c290672325"),
    "name": "Menz",
    "numberOfRecord": 0,
    "status": true
  },
  {
    "_id": ObjectId("5c4ee7eea4affa32face874b"),
    "name": "Dave",
    "numberOfRecord": 1, // instead 2 bcoz this is only gte "2020-01-01"
    "status": true
  }
]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-01 20:37:37

您可以使用$unwind来拆分数组,但是使用$match将完全消除没有任何匹配文档的文档,因此您可能需要使用带有条件计数的$group

代码语言:javascript
复制
db.setting.aggregate([
  {$match: {
      status: true,
      deleted_at: 0,
      _id: {
        $in: [
          ObjectId("5c4ee7eea4affa32face874b"),
          ObjectId("5ebf891245aa27c290672325")
        ]
      }
  }},
  {$lookup: {
      from: "site",
      localField: "_id",
      foreignField: "admin_id",
      as: "data"
  }},
  {$unwind: {
        path: "$data",
        preserveNullAndEmptyArrays: true
  }},
  {$group: {
      _id: "$_id",
      name: {$first: "$name"},
      status: {$first: "$status"},
      numberOfRecord: {
        $sum:{
           $cond:{
              if:{
                  $gte:[
                        "$data.createdAt",
                        new Date("2020-01-01")
                       ]
              },
              then: 1,
              else: 0
           }
        }
     }
  }},
  {$sort: { numberOfRecord: 1 }}       
])

游乐场

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62139307

复制
相关文章

相似问题

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