gpt4 book ai didi

javascript - 查询包含指定子键的每个条目的id

转载 作者:行者123 更新时间:2023-12-03 03:55:44 26 4
gpt4 key购买 nike

给定如下的数据库方案:

{
"lessons": {
"subjectId1": {
"lessonId2": { ... },
"lessonId4": { ... },
"lessonId6": { ... }
},
"subjectId2": {
"lessonId1": { ... },
"lessonId3": { ... },
"lessonId5": { ... },
"lessonId7": { ... }
}
}
}

如何检索包含给定 LessonId 的任何主题的 ID?

我想出了一个这样的函数:

    const refWithParent = database.ref("lessons");
const snapshot = await refWithParent.orderByChild(lessonId).limitToLast(1).once("value");

let firebaseId = null;
if (snapshot.val() !== null) {
snapshot.forEach(entry => {
firebaseId = entry.key;
return true;
});
}
return firebaseId;

这确实有效,但我无法在数据库中创建索引,因为子项是动态创建的。有没有更简单的方法来检索 id?

最佳答案

据我了解,您想要检索包含具有特定 ID 的类(class)的任何主题的一个索引。如果是这样,您可以向每个主题添加一个“包含”节点,您将在其中放入以下形式的键/值:lessonId: true

{
"lessons":{
"subjectId1":{
"contains":{
"lessonId2":true,
"lessonId4":true,
"lessonId6":true
},
"lessonId2":{ ... },
"lessonId4":{ ... },
"lessonId6":{ ... }
},
"subjectId2":{
"contains":{
"lessonId1":true,
"lessonId3":true,
"lessonId5":true,
"lessonId7":true
},
"lessonId1":{ ... },
"lessonId3":{ ... },
"lessonId5":{ ... },
"lessonId7":{ ... }
}
}
}

然后进行查询(假设 lessonID 是代码中的变量):

refWithParent.orderByChild(`contains/${lessonID)`).equalTo(true).limitToFirst(1).once('value');

然后检查获取到的snaphost如下:

if (snapshot.val() !== null)
{
let subjectId = snapshot.key;
//TODO something with subjectId...
}

注意,当您向主题添加类(class)时,您必须始终将相应的对添加到“包含”节点。与删除相同。

P.S.如果您想获取包含给定类(class)的所有主题的 ID,只需从查询中删除 .limitToFirst(1) 即可。仅此而已。

关于javascript - 查询包含指定子键的每个条目的id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44959011/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com