我正在尝试从函数读取/写入Firestore,并且读取有问题,写入工作正常。我正在按照here的示例进行操作,但是下面的查询(及其变体)返回了空的Promise:
module.exports.customerByPhone = phone => {
return db.collection('customers')
.limit(1)
.get();
// .where('phoneNumber', '==', phone).get();
};
如您所见,最初我尝试使用 where -空的承诺,我也尝试使用任何-相同的结果。
这是我插入数据的方式:
db.collection('customers').add({
phoneNumber: 123456,
active: true,
registration: new Date()
}).then(it => console.log(`added ${it}`));
Package.json片段:
"dependencies": {
"firebase-admin": "^8.6.0",
"firebase-functions": "^3.3.0"
}
以及一些身份验证逻辑:
const key = require("../firebase.key.json");
//
admin.initializeApp({
credential: admin.credential.cert(key),
databaseURL: "https://cant-touch-this.firebaseio.com"
});
const db = admin.firestore();
编辑
这里的应用程序流程更完整
请求处理程序如下:
module.exports.handle = (req, res) => {
// doInsert and query below are just for test purposes
db.doInsert();
db.customerByPhone(req.body.phoneNumber).then(function (doc) {
if (doc.exists) {
console.log("Document data:", doc.data());
} else {
// doc.data() will be undefined in this case
console.log("No such document!");
}
});
...
}
正如我所说,doInsert可以实现,实现:
module.exports.doInsert = () => {
db.collection('customers').add({
phoneNumber: 123456,
active: true,
registration: new Date()
}).then(it => console.log(`added ${it}`));
}
现在查询部分,它突出显示一个元素,即impl:
module.exports.customerByPhone = phone => {
return db.collection('customers')
// .where('phoneNumber', '==', phone)
.limit(1)
.get()
};
我想念什么?
答案 0 :(得分:1)
您将电话号码存储为整数:
struct RecoveryServerConnector
{
void Init(string ip, uint16_t port)
{
pthread_t pth;
pthread_create(&pth,NULL,&RunThread,this);
}
void ConnectionPoller()
{
//some work here
}
static void* RunThread(void* context)
{
(RecoveryServerConnector*)(context)->ConnectionPoller();
}
};
但是您正在用字符串查询它:
db.collection('customers').add({
phoneNumber: 123456, // THIS IS AN INTEGER
active: true,
registration: new Date()
})
在Firestore中,字符串和数字永远不会相等,因此此查询将永远无法工作。
由于电话号码不是真正的整数。它们不代表数值,您永远也不会与它们匹配。因此,您应该将它们存储为字符串:
// req.body.phoneNumber is a string
db.customerByPhone(req.body.phoneNumber)
在致电db.collection('customers').add({
phoneNumber: '123456', // THIS IS A STRING
active: true,
registration: new Date()
})
时,请在数字两边加上引号,以便Firebase知道您要存储字符串。然后使用相同的字符串查询将找到该文档。