我在mongo上有一个数据集,如:
(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}}]
结果如下:
{{1}}
然后我使用clojure库来获得最短日期。是否有使用贩子的直接方式?
答案 0 :(得分:0)
要在monger中执行此操作,您可以先按年升序,然后按月升序对结果进行排序,然后选择第一个结果。
以下是documentation的修改示例:
(ns my.service.server
(:refer-clojure :exclude [sort find])
(:require [monger.core :as mg]
[monger.query :refer :all]))
(let [conn (mg/connect)
db (mg/get-db "your-db")
coll "your-coll"]
(with-collection db coll
(find {})
(fields [:year :month])
;; it is VERY IMPORTANT to use array maps with sort
(sort (array-map :year 1 :month 1))
(limit 1))
如果您经常这样做,请考虑在集合中添加index以加快查询速度:
(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)))