2011-09-08 4 views
1

MongoDB 값을 자바 스크립트 표현식으로 설정할 수 있습니까?

이제 카운터 또는 표현식과 같은 동적 값으로 설정하고 싶습니다.

var i = 0; 
db.people.update({ name:"Joe" }, { $set: { n : $i++ } }); 

db.people.update({ name:"Joe" }, { $set: { n : ${new Date()} } }); 

이것이 가능한가 ?

전체 문서를 수정하고 저장할 필요가없는 솔루션도 허용합니다.

+0

'$ inc'은 ​​무엇을합니까? 당신이 준 예제는별로 의미가 없습니다. –

+0

미안합니다. 나는 나의 실수를 고쳐 줘, 고마워! –

답변

1

몽고는 MongoDB를 지원하는 확장 된 자바 스크립트 쉘입니다 당신은 일반 자바 스크립트로 할 수있는 일을 할 수 있도록 :

var i = 0; 
db.people.update({ name:"Joe" }, { $set: { n : i++ } }); 

db.people.update({ name:"Joe" }, { $set: { n : new Date() } }); 

업데이트

아 그래서 .. 그게 효과가 없을거야. 당신은 각 문서를 무심코 업데이트해야합니다! JS는 해당 쿼리를 데이터베이스에 전달하기 전에 실행됩니다. Effectly 당신이하고있는 다음과 같은 : 당신은 개별적으로 각 문서를 업데이트해야하지만 약간의 물건을 조금 속도를 db.eval()와 서버 측에서 모든 일을 수행 할 수 말했듯이

db.foo.update({}, { $set: { n : 0 } }, false, true); # i was zero here 
i++; 

)

+0

나는 당신의 제안을 시도했다. 그러나 나는 ++가 단지 한 번 평가되어 모든 문서가 같은 가치 (1)를 얻는 것처럼 보인다. 나는 그것이 합리적이라고 생각한다. 그러나 나는 매번 평가되는 표현식을 할당하는 방법을 여전히 찾고있다. –

+0

아니요 매번 평가됩니다. 뭔가 잘못하고있는 중이 야. 코드를 보여줘. 어쩌면 결과 (객체)를 저장하고 다시 평가하기를 원합니까? –

+0

다시 시도해 보았습니다. 새로운 대답을 보았습니다. (주석으로 적절하게 형식화 할 수 없었습니다 ...) –

관련 문제