Mongodb Clojure-Monger运算符-缺少带有日期转换的多字段concat和查询支持

Mongodb Clojure-Monger运算符-缺少带有日期转换的多字段concat和查询支持,mongodb,clojure,monger,Mongodb,Clojure,Monger,我在mongo上有一个数据集,比如: {"month": 9, "year": 2015, "name": "Mr A"} {"month": 9, "year": 2015, "name": "Mr B"} {"month": 10, "year": 2015, "name": "Mr B"} {"month": 11, "year": 2016, "name": "Mr B"} 我正在尝试使用monger从中获取最短日期,但没有任何运气 我所能做的最好的事情就是使用以下方法得出不同的月份和

我在mongo上有一个数据集,比如:

{"month": 9, "year": 2015, "name": "Mr A"}
{"month": 9, "year": 2015, "name": "Mr B"}
{"month": 10, "year": 2015, "name": "Mr B"}
{"month": 11, "year": 2016, "name": "Mr B"}
我正在尝试使用monger从中获取最短日期,但没有任何运气

我所能做的最好的事情就是使用以下方法得出不同的月份和年份:

(mc/aggregate mongo-connection collection-name [{$group { :_id { :month "$month", :year "$year" } } }]))
结果如下:

[{"_id":{"year":2016,"month":11}},
 {"_id":{"year":2016,"month":10}},
 {"_id":{"year":2016,"month":9}}]

然后我使用clojure库获取最短日期。有没有直接使用monger的方法?

要在monger中执行此操作,您可以先按年份升序排序结果,然后按月份升序排序,然后选择第一个结果

下面是一个修改后的示例:

如果这是你经常要做的事情,考虑添加一个集合来加快查询:

(ns my.app
  (:require [monger.core :as mg]
            [monger.collection :as mc]))

(let [conn (mg/connect)
      db   (mg/get-db "your-db")
      coll "your-collection"]

  ;; create an index on multiple fields (will be automatically named year_1_month_1 by convention)
  (mc/ensure-index db coll (array-map :year 1 :month 1)))
(ns my.app
  (:require [monger.core :as mg]
            [monger.collection :as mc]))

(let [conn (mg/connect)
      db   (mg/get-db "your-db")
      coll "your-collection"]

  ;; create an index on multiple fields (will be automatically named year_1_month_1 by convention)
  (mc/ensure-index db coll (array-map :year 1 :month 1)))