2014-01-07 3 views
1

Monger를 사용하여 Mongo에 연결 중입니다. 나는Mongo`forEach`를 실행하거나 Monger와 함께 내 JS를 실행하려면 어떻게해야합니까?

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

나는 상인의 문서에서 항목 또는 다른 모음에 삽입 할 자바 스크립트를 전달하는 방법 '각각'관련을 볼 수 없습니다를 실행하려면. 어떻게해야합니까?

EDIT이 질문은 오해의 소지가 있음을 의미합니다 (forEach은 서버 API가 아닌 클라이언트 API에 있습니다). 나는 그것을 삭제할 수 없다.

(require 'monger.collection) 

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

왜 당신은 자바 스크립트를 사용하려고 :

+5

나는이 잘못된 정보를 바탕으로, 질문이 잘못 물었다 . (적절한 신고 카테고리를 찾을 수 없습니다. 죄송합니다) – Joe

답변

5

당신은 Clojure의 맵의 게으른 순서로 각각의 문서를 처리 할 수 ​​있습니까? ClojureScript를 사용하고 있습니까? 아니면 mongodb 셸에서 코드를 작성하는 방법을 생각하고 있습니까?

면책 조항 :doseq을 사용하면 여기서는 기능적이지 않으며 달성하려는 대상에 따라 관용적이지 않을 수 있습니다. map 또는 reduce을 사용하는 것이 더 낫습니다. 예제 코드 인 forEach에 가장 근접한 것을 작성하려고했습니다.

관련 : 당신은 상인과 eval MongoDB를 명령에서 command 기능을 사용할 수 있습니다

+0

감사합니다. 내가 뭘 원하지는 않지만. 몽고 프로세스에서 이것을 실행하고 싶습니다. 그 이유는 크게 병목 현상입니다. 나는 약 1 천만 개의 레코드로 이것을 할 것이므로 중요하다. 더 자세히 살펴보면이 질문은 서버 질문이 아닌 셸 명령 인 것처럼 보이므로 내 질문이 유효하지 않게됩니다. – Joe

+0

@Joe 당신은 mongod 프로세스에서 이것을 더 빨리 실행할 수 있습니까? 실마리가 없지만 실제로 성능 테스트를 실행 한 적이 있는지 궁금합니다. 물론 Clojure 프로세스가 원격 서버가 아닌 로컬에서 실행되고 있다고 가정합니다. – dbyrne

+0

글을 쓰는 것은 불가능합니다. 하지만 그렇습니다. 저는 많은 작은 데이터를 다루고 있습니다. 단일 업데이트와 큰 일괄 처리 사이의 시간차를 보았습니다. 나는 내가하고 싶은 일이 서버에서 일어나는지 알아내는 것이 가치가 있다고 확신한다. 귀하의 답변 주셔서 감사합니다,하지만 질문은 착각했고 나는 그것을 삭제합니다. – Joe

3

(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) { })}"}) 
+1

+1 - 좋은 답변입니다. – dbyrne