저는이 스칼라 세계에 처음 왔으며 누군가가 저를 도울 수 있다면 감사 할 것입니다. 그래서 저는 MongoDB Scala 드라이버를 사용하여 mongodb 데이터베이스에 파일을 저장하는 Scala 애플리케이션을 구축하고 있습니다. 이전에 Casbah를 사용하고 있었지만 mongodb 공식 웹 사이트에 레거시 드라이버이고 내 프로젝트가 방금 시작되었다고 나와 있으므로 공식 드라이버로 이동하기로 결정했습니다.
그래서 내 응용 프로그램은 ID를 포함하는 객체를 저장하고이 ID는 "Sequences"라는 MongoDB의 컬렉션에 제공됩니다. 이 클래스에서 객체를 저장하고 싶을 때마다 먼저 시퀀스에서 마지막 ID를 가져 와서 1 씩 증가시킵니다.
Casbah를 사용할 때이 코드는 작업을 수행하는 데 사용되었습니다.
def getSequenceId(seqName: String): Int = {
val query = MongoDBObject("seq_id" -> seqName);
val result = MongoFactory.SequenceCollection
.findAndModify(query, $inc("nextId" -> 1))
val nbr = result.get("nextId");
return nbr.toString.toDouble.toInt;
}
문제는 MongoDB Scala 드라이버를 사용하면 Observable 패턴을 사용해야하며 약간 혼란 스럽습니다.
지금까지 다음과 같은 코드를 만들었습니다.
def getSequenceId(seqName: String): Int = {
val query = new BsonDocument("seq_id", new BsonString(seqName))
val resultado = NewMongo.SequenceCollection.findOneAndUpdate(query,inc("nextId",1)).collect()
.subscribe(new Observer[Seq[Document]] {
override def onNext(result: Seq[Document]): Unit = println(s"UPDATED ${result(0)}")
override def onError(e: Throwable): Unit = println(s"Failed due to $e")
override def onComplete(): Unit = println("Completed")
})
}
문제는이 옵저버 패턴을 처음 사용하고 수정 된 문서를 가져 와서 마지막 ID를 얻는 방법을 모른다는 것입니다. 나는 그것에 대해 많은 웹 사이트에서 검색했지만 답을 찾을 수 없었습니다. 대부분의 경우 Casbah에 대한 해결책 만 찾았습니다.
감사
설명을 위해 직접 수행하는 방법을 찾았습니다.
def getSequenceId(seqName: String): Int = {
val query = new BsonDocument("seq_id", new BsonString(seqName))
val resultado = NewMongo.AibodSequence.findOneAndUpdate(query,inc("nextId",1))
resultado.subscribe(new Observer[Document] {
override def onNext(result: Document): Unit ={}
override def onError(e: Throwable): Unit ={}
override def onComplete(): Unit = {}
})
val awaitedR = Await.result(resultado.toFuture, Duration.Inf).asInstanceOf[List[Document]](0)
val ret = awaitedR.get("nextId").getOrElse(0).asInstanceOf[BsonDouble].intValue();
return ret;
}
분명히 결과 관찰자를 미래로 변환하고 Await 함수를 사용하여 반환을 기다릴 수 있습니다. 그런 다음 원하는대로 결과를 조작 할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다