2015-01-12 5 views
0

MongoDB를 포함하여 완전히 스크립트 된 환경의 가상 기계 (CentOS)가 있습니다. 내 컬렉션에서 자동 증가 ID 열에 대한 요구 사항이 있고 mongoDB 설명서의 지침에 따라 카운터 컬렉션과 해당 컬렉션을 업데이트하는 함수를 사용했습니다. http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/MongoDB에서 쉘 스크립트를 사용하여 기능을 설치하십시오.

내가 너무 내 삽입 함수를 호출 이것을 몽고 쉘에서 작업을 얻고 순서를 증가 할 수 있고 나는 이제 VM 프로비저닝의 일환으로 스크립트를 찾고 있어요 :

전체 세부 사항은 여기에서 찾을 수 있습니다 하지만 함수 부분을 다루는 방법을 잘 모르겠습니다.

mongo audit --eval "db.counters.insert({_id: 'sequence',seq: 0})" 

다음 내가 system.js 컬렉션에 내 함수를 추가합니다 :

mongo audit --eval "db.getCollection('system.js').save({_id:'getNextSequence', value:'function getNextSequence(name) { var ret = db.counters.findAndModify({ query: { _id: name }, update: { $inc: { seq: 1 } }, new: true }); return ret.seq; }'})" 

지금 내가하려고 저장된 스크립트를로드

나는 사용하여 내 bash는 스크립트에서 카운터 수집을 만들었습니다 :

mongo audit --eval "db.loadServerScripts()" 

이 나에게 오류 제공 :

를3210
SyntaxError: Unexpected token 

나는이 잘못된 방향으로 가고 있습니까? 내 컬렉션에 삽입 할 때마다 호출 할 수있는 함수를 설치하는 또 다른 방법입니까?

내 삽입은시나의 웹 서비스에서 실행되는 일부 JRuby를 코드에서 실행이과 유사합니다 : 어떤 도움

db.users.insert(
    { 
    _id: getNextSequence("sequence"), 
    name: "Bob Builder." 
    } 
) 

감사합니다.

As이 내가 몽고를 시작하고 내 VM 프로비저닝의 일환으로 컬렉션을 만드는 데 사용하는 스크립트입니다 요청 :

#start mongo service 
sudo service mongod start 

#set config to restart service on reboot 
sudo chkconfig mongod on 

#create DB collections and indexes 
mongo --eval "db.getSiblingDB('audit').errors.ensureIndex({title_number:1})" 
mongo --eval "db.getSiblingDB('audit').minteds.ensureIndex({title_number:1})" 

이 지금까지 잘 작동되었지만 지금은 ID를 증가 자동이 필요합니다.

위의 링크에있는 지침을 따라 직접 대화 형 셸을 통해 기능을 추가하고 위의 사용자 컬렉션에 표시된대로 삽입에 함수를 호출했습니다. 이 시점에서 내가 한 일을 스크립트에서 찾기 시작하여 서버에 기능을 설치 (잘못 회신에 의해 판단 아마하지만)

mongo --eval "db.getSiblingDB('audit').counters.insert({_id: 'sequence',seq: 0})" 
그때 시도

을 계산 순서를 보유 할 카운터 모음을 만들 처리했다 using

mongo audit --eval "db.getCollection('system.js').insert({_id:'getNextSequence', value:'function getNextSequence(name) { var ret = db.counters.findAndModify({ query: { _id: name }, update: { $inc: { seq: 1 } }, new: true }); return ret.seq; }'})" 

Robomongo를 사용하면 기능이 있음을 알 수 있었지만 삽입을 시도했을 때 작동하지 않는 것 같습니다. 기본적으로 위의 링크에 표시된 프로세스를 스크립팅해야하지만 수동으로 수행하지 않고는 설치/실행 기능을 얻을 수 없습니다. 나는 근본적으로 뭔가 빠져있는 것 같아요. 그러나 그것이 무엇인지 알 수 없으므로 여러분의 의견을 매우 높이 평가합니다.

답변

0

서버에 삽입 할 때마다 실행되는 함수를 설치할 방법이 없습니다. 이러한 함수가 필요한 경우 코드의 모든 삽입 지점에서 호출해야합니다.예기치 않은 토큰 오류의 원인이되는 자바 스크립트에는 오자 나 무언가가 있지만 현재 방법으로 진행하고 싶지 않으므로 부적절합니다.

자동 증가를 설정하려면 JRuby 코드에서 getNextSequence 함수를 정의한 다음 각 삽입에 대해 호출하십시오. 삽입을 수행하는 다른 클라이언트는 삽입/업셋 전에도 호출하려면 getNextSequence 함수가 필요합니다. 서버 측의 모든 삽입에 대해 실행할 함수를 설정할 수는 없습니다. 모든 클라이언트getNextSequence 함수를 사용하여 올바르게 삽입하고 자동 증가 _id을 유지 관리해야합니다.

+0

내 프로비저닝에 대한 세부 정보를 보여주기 위해 제 질문을 수정합니다. – spannerj

관련 문제