firebase - .orderByChild() 不适用于 Firebase (vue.js)
问题描述
我正在尝试使用 .orderByChild 对数据进行排序,但数据是按节点名称过滤的。
我在 Firebase 上添加了这个:
"concerts": {
".indexOn": "expires"
}
这是我的 index.js 文件中的代码:
loadConcerts ({commit}) {
commit('setLoading', true)
firebase.database().ref("concerts").orderByChild("expires").startAt(Date.now()/1e3).limitToFirst(7).once("value")
.then((data) => {
const concerts = []
const obj = data.val()
for (let key in obj) {
concerts.push({
expires: obj[key].expires,
...
})
}
commit('setLoadedConcerts', concerts)
commit('setLoading', false)
})
我还添加了这个:
getters: {
loadedConcerts (state) {
return state.loadedConcerts.sort((concertA, concertB) => {
return concertA.expires > concertB.expires
})
},
loadedConcert (state) {
return (concertId) => {
return state.loadedConcerts.find((concert) => {
return concert.id === concertId
})
}
也许有人有线索?谢谢
解决方案
为了以正确的顺序(按expires
)列出值,您应该使用该forEach()
方法而不是直接使用data.val()
。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Title</title>
<script src="https://www.gstatic.com/firebasejs/5.5.8/firebase.js"></script>
</head>
<body>
<script>
// Initialize Firebase
var config = {
apiKey: '......',
authDomain: '......',
databaseURL: '......',
projectId: '......',
storageBucket: '......'
};
firebase.initializeApp(config);
firebase
.database()
.ref('past')
.orderByChild('expires')
.startAt(Date.now() / 1e3)
.limitToFirst(7)
.once('value')
.then(data => {
const concerts = []
data.forEach(element => {
console.log(element.val());
concerts.push({ id: element.key, expires: element.val().expires});
});
});
</script>
</body>
</html>
PS:如果您想以相反的顺序订购,只需将值存储在另一个字段中-1*expires
推荐阅读
- sql - 在给定附加条件的情况下从 JOIN 获取单行
- git - 如何通过 SSH 访问 Bitbucket 启用访问控制?
- reactjs - 如何从一个页面路由到另一个页面?
- python - SQL 密码中的特殊字符
- r - 如何处理 R 中合并的列标题?
- apache-kafka - 如何为 Confluent Schema Registry 指定 nodePort?
- autodesk-data-management - Data Management API 获取文档的完整文件夹路径
- r - 在 Shiny 中选择单选按钮的活动选项卡
- flutter - RenderBox 未布置:RenderFittedBox#79644 relayoutBoundary=up1
- nlp - XLNetForSequenceClassification 预训练模型无法加载