如何用Monger执行Mongo`forEach`(或运行我自己的JS)?

时间:2014-01-07 18:15:49

标签: mongodb clojure monger

我正在使用Monger连接到Mongo。我想跑

db.collection.find().forEach(function(x) { db.collection-two.insert(...) })

我无法在Monger文档中看到相关的“每个”条目,也无法通过JavaScript传递到另一个集合中。我该怎么做呢?

编辑这个问题是基于一个误解(forEach位于客户端API而不是服务器API上。我会删除它,但我不能。

2 个答案:

答案 0 :(得分:5)

您可以将每个文档处理为Clojure映射的延迟序列:

(require 'monger.collection)

(doseq [x (monger.collection/find-maps "your-collection")]
  ;you can process x here, which is a vanilla clojure map
  (println x))

您为什么要使用JavaScript?您使用的是ClojureScript,还是只考虑如何从mongodb shell编写代码?

免责声明:此处使用doseq功能不正常,可能不是惯用的,具体取决于您要完成的工作。使用mapreduce可能更好,我只是想写一些与您的forEach示例代码最匹配的内容。

相关:

答案 1 :(得分:3)

您可以使用monger中的command函数和eval mongodb命令

(ns user
  (:require [monger.core :as mg]
            [monger.core :as mc]))

;; (command {:eval "function() { db.collection.find().forEach() }"}

(mg/connect!)
(mg/set-db! (mg/get-db "test"))
(mc/command {:eval "function() { db.fs.files.find().forEach(function(x) { })}"})