2011-12-08 3 views
1

$push 수정자를 사용하여 새 값을 배열에 가져 오는 방법은 무엇입니까?푸시 후 인덱스 가져 오기

예를 들어, 나는 문서의 배열,

{ ... 
    'myarray': [1, 2, 3] 
.... 
} 

푸시 후 myarray에서 10 번, 내가 사용 count 방법을 생각하고 인덱스 번호 3.

를 얻을하고자하는 말을 가지고 있지만, 생각 그것은 원자가되지 않을 것입니다.

+0

배열의 모든 요소가 고유하거나 중복 될 수 있습니까? –

+0

고유하거나 중복 될 수 있습니다. – bxx

답변

1

원자가되지 않습니다. 이 같은 작업을 수행하는 가장 좋은 방법은 findAndModify을 사용하는 것입니다

http://www.mongodb.org/display/DOCS/findAndModify+Command

여기에 원자 적 $ 푸시 업데이트를 적용하고 결과 문서를 반환하는 예입니다. findAndModify 호출은 푸시가 적용된 "새"문서를 반환합니다. 이것은 원자이다.

MongoDB shell version: 2.1.0 
connecting to: test 
> db.z.save({"a":[], "name": "list1"}) 
> db.runCommand({ "findAndModify": "z", "query": { "name": "list1" }, "update": { "$push": { "a": 64 } }, "new": true }) 
{ 
     "lastErrorObject" : { 
       "updatedExisting" : true, 
       "n" : 1, 
       "connectionId" : 65, 
       "err" : null, 
       "ok" : 1 
     }, 
     "value" : { 
       "_id" : ObjectId("4ee27202c469f4b2d3c6cbf9"), 
       "a" : [ 
         64 
       ], 
       "name" : "list1" 
     }, 
     "ok" : 1 
} 
> db.z.find() 
{ "_id" : ObjectId("4ee27202c469f4b2d3c6cbf9"), "a" : [ 64 ], "name" : "list1" } 

그런 다음 클라이언트 코드에서 색인을 계산합니다. 후속 작업에서는이 색인을 무효로 할 수 있습니다 (즉, 후속 제거, $ 집합 또는 $ 당김).이 경우 처리는 응용 프로그램에 따라 다릅니다.

관련 문제