Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/441.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检索文档数据,其中条件值是子集合值_Javascript_Firebase_React Native_Google Cloud Firestore - Fatal编程技术网

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

Javascript 检索文档数据,其中条件值是子集合值,javascript,firebase,react-native,google-cloud-firestore,Javascript,Firebase,React Native,Google Cloud Firestore,我在firestore上的数据库如下所示: Candidates | |______ID_1 | |_______likeDislikeSuper | | |___________ID_1 | ( data ) |_______value: n | |______ID_2 | |_______likeDislik

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

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

我想从value==n的候选对象中检索(数据)

firestore()
.collection('候选者')
.where('candidates/ID_1/likeDislikeSuper/ID_1','==','n')
.get();
**候选对象是一个集合,ID是文档,就像EdislekeSuper是候选对象的子集合一样

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

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

如何使用该值作为筛选器返回候选文档


如果我理解正确,您需要使用,如下所示:

var likeDislikeSuperQuery = db.collectionGroup('likeDislikeSuper').where('value', '==', 'n');
likeDislikeSuperQuery.get().then(function (querySnapshot) {
    querySnapshot.forEach(function (doc) {
        console.log(doc.id, ' => ', doc.data());
    });
});
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
子集合()下的所有文档,其
字段等于“n”


根据您的评论更新:

如果要获取此查询返回的
likeDislikeSuper
文档父级的所有
候选文档,可以执行以下操作:

var likeDislikeSuperQuery = db.collectionGroup('likeDislikeSuper').where('value', '==', 'n');
likeDislikeSuperQuery.get().then(function (querySnapshot) {
    querySnapshot.forEach(function (doc) {
        console.log(doc.id, ' => ', doc.data());
    });
});
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);
    });
});
但是,这并不是最有效的方法,因为几个
像EdislikeSuper
文档可能具有相同的父
候选者
文档


例如,您可以复制数据,并为每个喜欢/不喜欢ID创建一个主要的
likeDislike
文档集合,其中包含一个
candidateId
s数组(或者如果您认为数组可能太大,文档可能会到达目标,那么可以创建一个
candidate
文档的子集合).

如果要查询用户喜欢的SlikeSuper子集合,必须为其构建集合引用:

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

你的疑问肯定是不对的。“/”不是字段分隔符,并且不会在字段路径中重复集合的名称。但我不清楚你的结构是什么。您是在单个文档中显示嵌套映射,还是在候选文档中的文档下嵌套子集合?请编辑此问题,以便更清楚地了解您使用的数据。屏幕截图可能会有帮助。嘿,道格,谢谢,我用屏幕截图和有关结构的信息编辑。是的,
其中
不正确,我这样做是为了“象征”我想要返回的内容。为什么我不知道如何正确地执行此操作?这会返回“候选者”数据收集吗?或者它会从“likeDislikeSuper”集合返回数据?我对文档有点困惑,好吧,我尝试了,但是返回了类似的SlikeSuper文档,我想要检索候选文档:/你的问题中的
camp
值是什么意思?
where
的第一个参数,where(fieldPath,operation,value)由代码表示,我认为这是对的!但我现在遇到了一个以前遇到的错误,我不知道如何解决它`错误:[firestore/failed Premission]操作被拒绝,因为系统不是操作执行所需的状态。确保您的查询已通过firebase控制台编制索引。`感谢您的耐心,我正在与firebase合作一段时间。我想在where()中使用子集合值“likeDislikeSuper”来检索候选文档。我真的不知道您在说什么。在你的截图中,likeDislikeSuper是一个亚集体。我们无法看到其文档字段或值。请编辑问题以显示您希望查询查找的文档示例。