Javascript 超过2个where子句的Firestore查询不返回任何文档
我正在使用下面的查询Javascript 超过2个where子句的Firestore查询不返回任何文档,javascript,firebase,google-cloud-firestore,Javascript,Firebase,Google Cloud Firestore,我正在使用下面的查询 // get all events useEffect(() => { const currentDate = new Date(); const listEvents = () => { try { return ( firestore() .collection('events') .where('status', '==', 'Activ
// get all events
useEffect(() => {
const currentDate = new Date();
const listEvents = () => {
try {
return (
firestore()
.collection('events')
.where('status', '==', 'Active')
.where('propertyId', 'in', [user.propertyId, 'All'])
.where('eventFromDateTime', '>=', currentDate)
// .orderBy('eventFromDateTime', 'desc')
.onSnapshot((querySnapshot) => {
const _events = [];
if (querySnapshot) {
querySnapshot.forEach((documentSnapshot) => {
const event = documentSnapshot.data();
const fromEventDateTime = event.eventFromDateTime
? moment(event.eventFromDateTime.toMillis())
: null;
const toEventDateTime = event.eventToDateTime
? moment(event.eventToDateTime.toMillis())
: null;
const eventDate = fromEventDateTime.format('YYYY-MM-DD');
const eventFromDateTime = fromEventDateTime.format(
timeFormat,
);
const eventToDateTime = toEventDateTime.format(timeFormat);
_events.push({
...documentSnapshot.data(),
category: event.category || null,
eventDate: eventDate,
title: event.title,
description: event.description,
status: event.status,
eventFromDateTime: eventFromDateTime,
eventToDateTime: eventToDateTime,
totalRegister: event.totalRegister || null,
totalWaiting: event.totalWaiting || null,
updatedAt: documentSnapshot.data().updatedAt.toMillis(),
});
});
}
setEvents(_events);
setIsLoading(false);
})
);
} catch (error) {
console.log(error);
setError(error.message);
}
};
if (user && user.propertyId) {
return listEvents();
}
}, [user]);
在控制台中没有返回错误。log
我刚刚注意到,它先返回了2个文档,然后看起来像是第二次调用,没有返回任何文档
如果我注释.where('eventFromDateTime','>=',currentDate)
,则只有它返回文档
以下是我的数据库中数据的外观:
你能告诉我这个问题出了什么问题吗
谢谢
const currentDate=new Date()的格式
与保存在eventFromDateTime
中的字符串不同。这意味着where条件将无法正常工作
currentDate
是一个对象,eventFromDateTime
是一个字符串您的代码似乎没有任何错误处理。请执行此操作,并查看错误消息的内容。此外,我们无法看到数据库中的数据,因此我们无法知道此查询是否应该返回任何内容。如果快照处理程序中的结果明显为0,则应编辑问题以显示应返回的实际文档的示例。还要注意的是,我们也看不到user.propertyId
是什么-硬编码所有内容,因此这里没有未知内容。感谢Doug的快速响应。我补充了更多细节。如果您需要更多信息,请告诉我。我们仍然无法在您的数据库中看到实际数据,因此我们不知道此查询将如何处理这些数据。正如我之前所建议的,您应该显示与您的查询匹配但不在查询结果中的文档示例。我已上传数据截图。eventFromDatetime和eventToDateTime是时间戳值SeventFromDateTime和eventToDateTime是时间戳值firebase中的时间戳与new Date()
-它需要转换firebase.firestore.timestamp.fromDate(new Date())代码>我尝试了const currentDate=firestore.Timestamp.fromDate(new Date());仍然有同样的问题这是不准确的-您可以在查询中传递日期对象。为了查询时间戳类型字段,它们将自动转换为时间戳类型对象。这里讨论的字段实际上是时间戳字段,而不是格式化字符串。