TypeORM + MongoDB においてクエリ結果を生で取得する
2019/12/09 13:32:222019/12/09 20:23:06
user.ts
type Computer = Object
@Entity("users")
@Index(["user_id"], { unique: true })
export class User {
@ObjectIdColumn()
_id: ObjectID
@Column()
user_id: string
@Column()
name: string
@Column(type => Card)
favorite_computer: Computer
}
Computer
はまあ Object であり、名前やメーカーやその他情報がはいっている感じである。 findOneUserResult.ts
User {
_id: 5dedd3980a55fdc51114a3ed,
user_id: '39333d52-8174-4654-bc69-0ebb24600a45',
name: 'おれ'
}
convertFindManyOptionsOrConditionsToMongodbQuery
とかいうのが FindOptions を Query に変換していて、これにならって叩いてやる。 MongoQueryRunner
を用いていたはずで、これは多分 DB 接続済みの Mongo インスタンスがそのまま降ってきてる気がするので 、そこを直接叩いても良いかもしれない。 findByCursor.ts
const result: User[] = await repository.createCursor({ user_id: "39333d52-8174-4654-bc69-0ebb24600a45" }).toArray()
manager.createCursor(Producer, {query})
でも同値が取れる。 repository.createEntityCursor({query})
だと find
と同じような欠損が発生するので、そこらへんの処理にバグが隠れている気がする。 createEntityCursor
が用いられている {query}
としている部分には where の中身しか渡せてない { where: {}, take: 1 }
とかにすると結果が無になります createCursor
系統の関数で生データが取れるというお話でした。 0.3.0-alpha.24
、なにか find 系の関数全てに Breaking changes があって、入れた時点でまっかっかになっちゃったのもあるんですが、Entity 定義関連のバグとして、Index の expireAfterSeconds
の受け渡しが壊れていて、無指定で undefined になるはずが null が渡っちゃうのでシンクロナイズが失敗して落ちるというのがあった。 Generated from
TypeORM + MongoDB においてクエリ結果を生で取得する