Javascript 检索文档数据,其中条件值是子集合值
我在firestore上的数据库如下所示: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
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是一个亚集体。我们无法看到其文档字段或值。请编辑问题以显示您希望查询查找的文档示例。