Detected an object of type “Timestamp” that doesn&

2019-07-15 04:31发布

I'm wondering why is the Timestamp object is not working as I expect?

It works in test environment (I use Mocha), but throws error when it has been deployed.

index.ts

import { Timestamp, QuerySnapshot } from "@google-cloud/firestore";
....

async someFunction() {
   let col = firestore.collection("mycollection");
   let now = Timestamp.now();
   let twentyMinsAgo = Timestamp.fromMillis(now.toMillis() - (1200 * 1000));

   return col
      .where('LastEdited', '>=', twentyMinsAgo) //This throws error
      .get()
}

Stack Trace

Argument "value" is not a valid QueryValue. 
Detected an object of type "Timestamp" that doesn't match the expected instance. 
Please ensure that the Firestore types you are using are from the same NPM package.
      at Validator.(anonymous function).err [as isQueryValue] (/user_code/node_modules/firebase-admin/node_modules/@google-cloud/firestore/build/src/validate.js:99:27)
      at CollectionReference.where (/user_code/node_modules/firebase-admin/node_modules/@google-cloud/firestore/build/src/reference.js:940:25)

package.json

"dependencies": {
   ....
   "@google-cloud/firestore": "^0.16.0",
   "firebase-admin": "~6.0.0",
   "firebase-functions": "^2.0.5"
}

1条回答
别忘想泡老子
2楼-- · 2019-07-15 04:53

Now I get it why it throws an error. Because I import Firestore object separately, whereas I should just use Firestore object from Firebase Admin SDK.

What I changed:

  1. remove "@google-cloud/firestore" dependency from package.json

  2. Use admin.firestore.Timestamp object.

index.ts

async someFunction() {
   let col = firestore.collection("mycollection");
   let now = admin.firestore.Timestamp.now();
   let twentyMinsAgo = admin.firestore.Timestamp.fromMillis(now.toMillis() - (1200 * 1000));

   col.where('LastEdited', '>=', twentyMinsAgo) //Now ok
      .get()
}
查看更多
登录 后发表回答