如何通过JavaScript对html引导数据表中的firestore数据进行排序?

如何通过JavaScript对html引导数据表中的firestore数据进行排序?,javascript,html,firebase,google-cloud-firestore,Javascript,Html,Firebase,Google Cloud Firestore,我从firebase获取了云存储的数据,这也很成功,但没有排序。 当我获取静态数据时,它就完成了工作, 我不明白我的错误在哪里, 我尝试了很多次来解决这个问题,但都解决不了, 请有人帮帮我 提前感谢:) $(文档).ready(函数(){ $('#myTable1').DataTable(); } ); var firebaseConfig={ apiKey:“, authDomain:“”, 数据库URL:“”, 投射:“, storageBucket:“”, messagingSender

我从firebase获取了云存储的数据,这也很成功,但没有排序。 当我获取静态数据时,它就完成了工作, 我不明白我的错误在哪里, 我尝试了很多次来解决这个问题,但都解决不了, 请有人帮帮我

提前感谢:)


$(文档).ready(函数(){
$('#myTable1').DataTable();
} );
var firebaseConfig={
apiKey:“,
authDomain:“”,
数据库URL:“”,
投射:“,
storageBucket:“”,
messagingSenderId:“”,
appId:“”,
计量单位:“
};
firebase.initializeApp(firebaseConfig);
firebase.analytics();
const booksRef=firebase.firestore()集合(“JSDATA”);
booksRef.get().then(函数(querySnapshot){
querySnapshot.forEach(函数(doc){
document.getElementById(“myTable1”).innerHTML+=“”+doc.data().Email+“”+doc.data().Password+“”
console.log(doc.data().Email);
});
});
控制台日志(“hii”);
booksRef.get().then((快照)=>{
const data=snapshot.docs.map((doc)=>({
id:doc.id,
…doc.data(),
}));
console.log(“账簿”集合中的所有数据”,数据);
//const userdata=document.querySelector(“myTable1”);
//[{id:'glMeZvPpTN1Ah31sKcnj',标题:'伟大的盖茨比'}]
});

弗雷斯托数据
FireStore数据
电子邮件
密码
在该图像中,数据为firestore,但未排序

有了静态数据,它运行得非常完美


默认情况下,Firestore查询不会根据特定字段进行排序。如果您想通过电子邮件进行排序(按顺序),您需要调整查询,如下所示:

    const booksRef = firebase.firestore().collection("JSDATA").orderBy("Email");
     booksRef.get().then(function (querySnapshot){
更多详情请参阅


请注意,“一个
orderBy()
子句也会筛选给定字段的存在。结果集将不包括不包含给定字段的文档。”

如果我理解正确,您希望对表进行排序,允许用户单击标题单元格并按此排序。如果是这样,我做了类似的事情:

getClientsPaginated({ companyId, order, limit = null, startAt = null, endAt = null, searchByTerm = null }) {
    return new Promise((resolve, reject) => {
        const query = (ref) => {
            if (searchByTerm) {
                ref = ref.where(order['field'], '==', searchByTerm);
            } else {
                ref = ref.orderBy(order['field'], order['direction']);
            }

            if (startAt) ref = ref.startAfter(startAt);
            if (endAt) ref = ref.endBefore(endAt);

            if (limit) {
                if (!endAt) {
                    ref = ref.limit(limit);
                } else {
                    ref = ref.limitToLast(limit);
                }
            }

            return ref;
        };

        this.db.collection('your_collection', query)
            .get().pipe(take(1)).subscribe((clients) => {
                <rest of your code here>
            });
    });
}
const parameters = {
    companyId: companyId,
    order: queryOrder,
    limit: Number(limit),
    startAt: next,
    endAt: previous,
    searchByTerm: term
};

getClientsPaginated(parameters)

我希望这能有所帮助。

这样获取数据时,您可以在Firestore中进行排序-

booksRef.orderBy('the_fieldname_that_you_want_to_order_by').get()
// if you want to sort in decending order then
booksRef.orderBy('the_fieldname_that_you_want_to_order_by', 'desc').get()

现在它正在通过下面的代码工作

非常感谢你

var firebaseConfig={
apiKey:“,
authDomain:“”,
数据库URL:“”,
投射:“,
storageBucket:“”,
messagingSenderId:“”,
appId:“”,
测量:
};
firebase.initializeApp(firebaseConfig);
firebase.analytics();
const booksRef=firebase.firestore()集合(“JSDATA”);
var-srno=0;
booksRef.get().then(函数(querySnapshot){
querySnapshot.forEach(函数(doc){
srno++;
document.getElementById(“myTable1”).getElementsByTagName('tbody')[0]。innerHTML+=“”+srno+“”+doc.data().Email+“”+doc.data().Password+“”;
//控制台日志(aa);
});
$(文档).ready(函数(){
$('#myTable1').DataTable();
});
});

弗雷斯托数据
FireStore数据
高级工程师
电子邮件
密码

要在哪个字段上排序?电子邮件?不是任何单个字段我想对所有字段进行排序,就像我已经尝试过的那样,但我不想这样,我想这样更复杂:要么使用表库(但如果要在前端分页,则需要下载所有数据)或者您自己开发排序和分页功能以及相应的查询。看哦,不。。。其中使用了orderBy,我不想使用它,我想当我点击电子邮件选项卡时,它会自动排序,就像我发送的链接一样。嗨,Nawaz,所以不鼓励只使用代码的答案。如果您能编辑您的答案,并解释您的解决方案如何工作以及为什么工作,我会很有帮助。干杯
booksRef.orderBy('the_fieldname_that_you_want_to_order_by').get()
// if you want to sort in decending order then
booksRef.orderBy('the_fieldname_that_you_want_to_order_by', 'desc').get()