2017-11-25 18 views
0

Vapor 및 MongoKitten을 통해 MongoDB에서 자동 증가 필드를 업데이트하려고합니다. 꼭 고유 한 키일 필요는 없습니다.

목표는 $ inc 수정자를 사용하여 단일 원자 연산으로 만들고 반환 된 증가 된 결과를 모두 한 번에 가져 오는 것입니다.

MongoKitten에서이 작업을 지원합니까?

달성 할 수 있습니까? findAndUpdate 메서드를 사용하여?

예인 경우이 구문의 예가 ​​무엇입니까?

답변

0

MongoKitten을 사용하면 Collection에서 findAndUpdate 함수를 사용하여이 작업을 수행 할 수 있습니다. 입력은 (컬렉션의 모든 항목을 증가시키지 않는 한) 쿼리 여야하고 업데이트 문서에 대해 with 인수 여야합니다. 업데이트 문서 내부

// The query used to find the document to increment 
let query: Query = "_id" == ... 

, 당신은 사용할 수있는 $inc operator과 같이 :

let updateDoc: Document = ["$inc": ["myKey": 1]] 

이 1 개

let updated = try collection.findAndUpdate(query, with: updateDoc) 

updated 문서하여 증가하여 "있는 MyKey"을 업데이트 할 것입니다 을 업데이트하기 전에을 업데이트하십시오. 따라서 myKey의 값이 3 인 경우에는 4로 변경됩니다. 이 쿼리에서는 값이 3 인 문서를 받게됩니다.

는 최적화에 관심 있다면, 당신은

let updated = try collection.findAndUpdate(query, with: updateDoc, returnedDocument: .new) 

마지막으로 (.old에 기본값)를 returnedDocument 인수를 변경할 수 있습니다이를 변경하거나 당신이 투사을 추가하는 것을 고려한다 일반적으로 반환 된 결과를 제한 찾을 수 있습니다. Projections은 당신이하고 관심이 없습니다.

이 예제의 myKey 정수 값 인 반환하는 경우에만 관련 분야 (들)을 보장하기 위해 findAndUpdate로 사용할 수 있습니다 필드 데이터베이스에 나타냅니다.

let updated = try collection.findAndUpdate(query, with: updateDoc, returnedDocument: .new)