2014-09-14 2 views
1

고유 ID로 텍스트 열이있는 테이블 (AKA 컬렉션)을 정의하고 사용하려고합니다. persistent-persistent-mongodb, persistent-template 2.0.2 버전을 사용하고 있습니다.영구 mongodb에서 텍스트 열을 id로 정의하고 사용하십시오.

let mongoSettings = (mkPersistSettings (ConT ''MongoContext)) { mpsGeneric = False } 
    in share [mkPersist mongoSettings, mkMigrate "migrateAll"][persistUpperCase| 
User id=myid 
    myid  Text 
    count Int 
|] 

나는 Text 값에서 Key User를 만드는 방법을 알아낼 수 없습니다 :

이 내 테이블 정의입니다. 나는 시도 : 컴파일러 오류와

mkUser :: Text -> Key User 
mkUser x = UserKey . MongoKey $ x 

:

Couldn't match type ‘Text’ with ‘ObjectId’ 
Expected type: Text -> Key User 
    Actual type: ObjectId -> Key User 

영구의 몽고 키는 유형 ObjectId이 될 수 있습니까? 관련 source code의 시험에서이 사례가있는 것 같지만 잘못하고 싶습니다. 몽고 (Mongodb)는 확실히 영속적이지 않은 텍스트 키를 허용합니다. 실제로, any unique thing을 허용합니다.

는 또한 I과 같이 행을 삽입 시도 :

insert $ User "bob" 0 

를 있지만 결과는 데이터베이스 행 갖는 자동 생성 대신 "bob" 중, _id 열에 ObjectId.

User sql=profiles 
    _id Text 
    count Int 

가 나는 여전히 Text 값으로 Key User를 정의하는 시도의 문제가 : 나는 스키마를 정의하는 경우

.

답변

2

이것은 persistent-mongoDB의 새 기능입니다. (질문을 할 때 사용할 수 없었던) "아니요, 불가능합니다"였지만 이제는 "예, 여기 있습니다"입니다. 그것은 2.0.3 시리즈에서 사용할 수 있습니다 : persistent-2.0.3, persistent-template-2.0.3, persistent-mongoDB-2.0.3.

let mongoSettings = (mkPersistSettings (ConT ''MongoContext)) { mpsGeneric = False } 
    in share [mkPersist mongoSettings][persistUpperCase| 
User 
    Id Text 
    age Int 
|] 

을하고이 같은 특정 _id로 문서를 삽입 : 예를 들어 Id <type of _id field>을 :

스키마는 라인이 있어야합니다

insertKey (UserKey "alice") $ User 1 

는 또한 wiki를 참조하십시오.

관련 문제