我在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();
**“候选人”是一个集合,“ ID”是“文档”,就像DislikeSuper是“候选人”的子集合。
所以... where
的第一个参数是camp value
,不支持path
有人知道解决此问题的方法吗?
如何使用该值作为过滤器返回候选文档?
答案 0 :(得分:2)
如果我理解正确,则需要使用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'。
评论后更新:
如果要获取此查询返回的candidates
文档的父级的所有likeDislikeSuper
文档,可以执行以下操作:
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
s的数组(或{{1的子集合}}文档,如果您认为数组可能太大而无法到达1 MiB size limit)。
答案 1 :(得分:0)
如果要查询用户的likeDislikeSuper子集合,则必须为其建立CollectionReference:
firestore()
.collection('candidates')
.doc('ID_1')
.collection('likeDislikeSuper')
.where('ID_1', '==', 'n')
.get();