【发布时间】:2018-07-08 00:35:00
【问题描述】:
我有一个结构有点像的数据库
- game
- 1000
- clues: ...
- grid: ...
- gid: 1000
- createTime: ...
- pid: 2780
- 1001
- clues: ...
- ...
我想检索 pid 为 2780 的所有游戏。我在 game 上为 pid 设置了 .indexOn 规则。在节点中,我目前正在做:
db.ref('game').orderByChild('pid').equalTo(this.pid).once('value').then(
gameSnap => {
console.log(gameSnap.hasChildren()); // false
console.log(gameSnap.val()); // null
gameSnap.forEach(
childSnap => {
console.log(childSnap); // no printout
this.setState(prevState => {
games: [...prevState.games, [childSnap.key, gameSnap.child("createTime").val()]]
});
});
}
);
但gameSnap 始终为空。相比之下,当我使用 python Pyrebase 客户端通过 REST API 对数据库执行相同的查询时,会得到不同的结果:
In [257]: len(db.child('game').order_by_child('pid').equal_to(2780).get().each())
Out[257]: 25
我可能做错了什么?
【问题讨论】:
-
您确定
this.pid是您期望的值吗?只是问,因为您在 python 示例中硬编码了值。 -
你检查 this.pid 是否正确?
-
我在发布之前删除了
console.log(this.pid),这是正确的 IIRC,但我会尝试对其进行硬编码。 -
试试
console.log(childSnap.id + " is id and val is " + childSnap.val()); -
sljkhasdkljhskljhasdf
this.pid是"2780",它不是2780,所以它打印正确但在数据库中找不到。
标签: javascript node.js firebase firebase-realtime-database