Mysql 将SQL更改为NoSQL查询

Mysql 将SQL更改为NoSQL查询,mysql,sql,mongodb,Mysql,Sql,Mongodb,我是NoSQL数据库的新手,我有这个查询 SELECT COUNT(*) AS TotalIndex, SUM(Expense)AS Outflow, SUM(Income) AS Inflow, DATE_FORMAT(Date, '%b, %Y') AS Month FROM store GROUP BY month, year(Date) ORDER BY Date 但我不知道从哪里开始,我一直在尝试使用它,但它没有帮助太多 任何帮助都将不胜感激您可以使用mongodb构建查询 假设您的

我是NoSQL数据库的新手,我有这个查询

SELECT COUNT(*) AS TotalIndex, SUM(Expense)AS Outflow, SUM(Income) AS Inflow, DATE_FORMAT(Date, '%b, %Y') AS Month
FROM store
GROUP BY month, year(Date)
ORDER BY Date
但我不知道从哪里开始,我一直在尝试使用它,但它没有帮助太多

任何帮助都将不胜感激

您可以使用mongodb构建查询

假设您的数据库表“store”至少有三个字段(费用、收入和日期),类似的内容可以工作(未经测试):

您的文档将通过一个由几个阶段组成的管道:

  • 投影要用于计算分组依据的字段
  • 按从日期列中提取的月份和年份进行实际分组,定义不同列的计数和总和
  • 按日期升序排序
  • 以只剩下所需结果的方式投影输出,包括自定义月份符号

  • 这实际上不是翻译。在
    $组
    之后,文档中没有可见的
    日期
    等属性,您建议将其设置为
    $sort
    。这就是“管道”的工作原理。其中,给定阶段唯一可用的“输入”是其之前阶段的“输出”。如果你理解管道的概念和实际发生的事情,那么在
    $project
    之前进行
    $project
    也是一种非常可怕的做法。你说得对,尼尔,我想让OP先发制人,我会马上更正我的答案。@AkimanaAjoullyJeand'Amour,没问题。如果我的回答对您有所帮助,您可以通过单击旁边的复选标记来接受它。“转换我的代码”问题通常没有帮助,这主要是由于不同技术的工作方式不同,以及它们之间的“您应该如何以不同的方式存储内容”。真正的第一站应该是,而不是任何外部资源(而且已经过时,因为
    group()
    现在已不推荐使用)。然后,如果您在理解上仍然有问题,请给出一个实际的尝试和小数据示例。个人知识胜过工具。
    db.store.aggregate(
       [
         { $project : { expense: 1, income: 1, date:1, month: { $month: "$date" }, year: { $year: "$date"} } },
         { $group : { _id : {month: '$month',year:'$year'}, totalIndex: { $count: 1 }, outflow: { $sum: "$expense" }, inflow: { $sum: "$income" } } },
         { $sort : { date : 1 } },
         { $project : { totalIndex: 1, outflow: 1, inflow:1, month:  { "$concat" : [ "$month",  ", ", "$year" ] } } }
       ]
    )