gpt4 book ai didi

javascript - 检索文档数据,其中条件值是子集合值

转载 作者:行者123 更新时间:2023-12-02 21:05:22 25 4
gpt4 key购买 nike

我在 firestore 上的数据库如下所示:

Candidates
|
|______ID_1
| |_______likeDislikeSuper
| | |___________ID_1
| ( data ) |_______value: n
|
|______ID_2
| |_______likeDislikeSuper
| | |___________ID_2
| ( data ) |_______value: n

我想从值 == n 的候选人中检索(数据)

firestore()
.collection('candidates')
.where('candidates/ID_1/likeDislikeSuper/ID_1', '==', 'n')
.get();

**Candidates 是一个集合,ID 是文档,likeDislikeSuper 是 Candidates 的子集合。

所以...其中的第一个参数是camp值,不支持路径

有人知道解决这个问题的方法吗?

如何使用该值作为过滤器返回候选文档?

enter image description here

最佳答案

如果我理解正确的话,你需要使用 Collection Group query ,如下:

var likeDislikeSuperQuery = db.collectionGroup('likeDislikeSuper').where('value', '==', 'n');
likeDislikeSuperQuery.get().then(function (querySnapshot) {
querySnapshot.forEach(function (doc) {
console.log(doc.id, ' => ', doc.data());
});
});

该查询将返回 likeDislikeSuper 子集合(所有候选者)下的所有文档,其中 value 字段等于“n”。

<小时/>

更新您的评论:

如果您想获取作为此查询返回的 likeDislikeSuper 文档父级的所有 candidates 文档,您可以执行以下操作:

var likeDislikeSuperQuery = db.collectionGroup('likeDislikeSuper').where('value', '==', 'n');
likeDislikeSuperQuery.get().then(function (querySnapshot) {
querySnapshot.forEach(function (doc) {
const parentCandidateRef = doc.ref.parent.parent;
console.log('parentCandidate path: ', doc.ref.parent.parent.path);
});
});

但是,这不是最有效的方法,因为多个 likeDislikeSuper 文档可能具有相同的父 candidates 文档。

您可以复制数据,例如,为每个喜欢/不喜欢 ID 提供一个 likeDislike 文档的主要集合,其中包含一个 candidateId 数组(或一个如果您认为数组可能太大以至于文档会到达 1 MiB size limit ,则为 candidates 文档的子集合。

关于javascript - 检索文档数据,其中条件值是子集合值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61239113/

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