원자가되지 않습니다. 이 같은 작업을 수행하는 가장 좋은 방법은 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" }
그런 다음 클라이언트 코드에서 색인을 계산합니다. 후속 작업에서는이 색인을 무효로 할 수 있습니다 (즉, 후속 제거, $ 집합 또는 $ 당김).이 경우 처리는 응용 프로그램에 따라 다릅니다.
배열의 모든 요소가 고유하거나 중복 될 수 있습니까? –
고유하거나 중복 될 수 있습니다. – bxx