Open3

Firestoreのtimestampでbetween的な処理

sukedonsukedon
  • 現在時刻~7日前のいいね数上位300件
let fireStore = admin.firestore()
var endDate = new Date();
var startDate = new Date();
startDate.setDate(startDate.getDate() - 7);
return await fireStore.collectionGroup(getPostPath(env))
    .orderBy('createdAt', 'desc')
    .startAt(startDate)
    .endAt(endDate)
    .orderBy('likeCount','desc')
    .limit(300)
    .get()

これでいいんだろか
getPostPath(env)は取得したいcollectionのパスを返す関数

sukedonsukedon

エラー出てた

Error: Cannot specify an orderBy() constraint after calling startAt(), startAfter(), endBefore() or endAt().

orderBy()はstartAt(),startAfter(),endBefore(),endAt()の後には書けません的な

https://firebase.google.com/docs/firestore/query-data/order-limit-data

orderBy() 句の次の制限事項に注意してください。

無効: 範囲フィルタと最初の orderBy を異なるフィールドに使用する

んん、、
自分がやりたいのは

  • createdAtが7日前~現在
  • その中でlikeCount昇順
  • そこから数百件
    という処理なので、これはちょっと出来ない...?

https://blog.skylarking.me/2019/02/07/firestore/

おわた