【问题标题】:Setting ReadPreference in Clojure MongoDb Driver Monger在 Clojure MongoDb Driver Monger 中设置 ReadPreference
【发布时间】:2017-06-28 21:42:44
【问题描述】:

在 Monger 中使用 find-maps 时如何设置 ReadPreference? Monger 文档仅指定了 monger.query 的 with-collection 的用法,如下所示

(ns my.service.server
(:refer-clojure :exclude [sort find])
(:require [monger.core :as mg]
        [monger.query :refer :all])
(:import com.mongodb.ReadPreference))

(let [conn (mg/connect)
  db   (mg/get-db conn "monger-test")
  coll "scores"]
;; reads from primary (master) to guarantee consistency
;; (at the cost of putting extra load on the primary)
(with-collection db coll
(find {:email "joe@example.com"})
(read-preference (ReadPreference/primary))))

【问题讨论】:

    标签: mongodb clojure monger


    【解决方案1】:

    一种方法是在连接到 Mongo 时设置读取首选项:

    (mg/connect
      (mg/server-address "127.0.0.1" 27017)
      (mg/mongo-options {:read-preference (com.mongodb.ReadPreference/secondaryPreferred)}))
    

    如果您正在考虑在 Java API 中使用此方法:https://mongodb.github.io/mongo-java-driver/3.4/javadoc/com/mongodb/DBCollection.html#setReadPreference-com.mongodb.ReadPreference- 我没有找到通过 monger 使用此方法的方法。但是,您可以使用自己的函数来利用此 API:

    (defn find-with-read-preference [db coll]
      (.find (doto
               (.getCollection db (name coll))
               (.setReadPreference (ReadPreference/secondaryPreferred)))))
    
    (defn find-maps-with-read-preference
      ([^DB db ^String coll]
       (with-open [result (find-with-read-preference db coll)]
         (map (fn [x] (monger.conversion/from-db-object x true)) result))))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-11
      • 1970-01-01
      • 2022-12-12
      • 1970-01-01
      • 2021-03-19
      • 2022-08-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多