MongoDB聚合闰年

0lvr5msh  于 2023-01-01  发布在  Go
关注(0)|答案(1)|浏览(161)

我正在学习MongoDB NoSQL,我有一个关于它的问题。
请考虑以下文档:

{
    "_id" : ObjectId("63a994974ac549c5ea982d2b"),
    "title" : "Destroyer",
    "year" : 2018
},
{
    "_id" : ObjectId("63a994974ac549c5ea982d2a"),
    "title" : "Aquaman",
    "year" : 2014
},

{
    "_id" : ObjectId("63a994974ac549c5ea982d29"),
    "title" : "On the Basis of Sex",
    "year" : 1996   
},

{
    "_id" : ObjectId("63a994974ac549c5ea982d28"),
    "title" : "Holmes and Watson",
    "year" : 1940
},
{
    "_id" : ObjectId("63a994974ac549c5ea982d27"),
    "title" : "Conundrum: Secrets Among Friends",
    "year" : 1957
},
{
    "_id" : ObjectId("63a994974ac549c5ea982d26"),
    "title" : "Welcome to Marwen",
    "year" : 2000
},

{
    "_id" : ObjectId("63a994974ac549c5ea982d25"),
    "title" : "Mary Poppins Returns",
    "year" : 1997
},

{
    "_id" : ObjectId("63a994974ac549c5ea982d24"),
    "title" : "Bumblebee",
    "year" : 2004
},

我试图得到所有的标题,他们有一个闰年,我想得到"计数"的所有标题。
所以,我试了这个代码:

var q1 = {$project: {
    leap: {
        "$and": [
                "$eq": ["$divide"["$year", 4], 0],
                {
                    "$or":[{"$ne": ["$divide"["$year",100],0]},
                    {"$eq": ["$divide"["$year", 400],0]}]
                }
            ]
    }
}}

var q2 = {$group: {"_id": null, "total": {$sum:1}}}

var etapas = [q1,q2]

db.genres.aggregate(etapas)

但是,在这段代码中,我只得到了'q1',变量'leap',所有的条件都是假的。所以,我不知道如何得到逻辑运算符为真或假时的年份。更重要的是,我想计算之前给我的文档中所有的闰年。
之前文档的预期输出如下所示:

{
    "_id": leap year
    "count": 3
}

我该怎么做呢?当我得到一个错误的结果时,我该怎么打字呢?
非常感谢你对这个问题的关注。无论你需要什么,都不要有任何问题。

ykejflvf

ykejflvf1#

要检查一个数是否可以被另一个数整除,您需要使用$mod查看余数是否为0,例如:

db.collection.aggregate([
  {$project: {
      leap: {
        "$and": [
          {"$eq": [{"$mod": ["$year",4]}, 0]},
          {"$or": [
              {"$ne": [{"$mod": ["$year", 100]}, 0]},
              {"$eq": [{"$mod": ["$year", 400]}, 0] }
          ]}
        ]
      }
  }},
  {$group: {
      "_id": "$leap",
      "total": {$sum: 1}
  }}
])

Playground

相关问题