我正在尝试运行查询来查看用户的文档是否包含文档内的产品 id,但问题是产品 id 存储在它自己的下拉集合中,而不是存储在第一个数据组中,所以我需要要做的是向下延伸,但问题是可能有不止一个这样的产品,它们在创建时都有自动生成的 id。我正在尝试查询此内容,以确保用户在 vue 中的 v-if 语句中显示内容之前已购买该产品。
正如您所看到的,付款收集中有多个文档,我所追求的产品首先在商品下,然后在价格下,然后我才能到达那里,通常我会直接导航到产品,但我不能,因为付款集合文档自动生成并具有自动生成 ID。
我尝试做的是下面的事情。
<script>
import { projectFirestore } from '../../Firebase/Config'
import PriceSelection1 from "./CowgirlVid/PriceSelection1.vue";
import SubscribedAccountSignup1 from "./CowgirlVid/SubscribedAccountSighnup1.vue";
import { firebaseAuth } from "../../Firebase/firebase";
import { ref } from 'vue'
import {
getFirestore,
collection,
query,
where,
getDocs,
} from "firebase/firestore";
export default {
components: {
PriceSelection1,
SubscribedAccountSignup1
},
data() {
return {
isLoading: false,
Purchased2: null,
};
},
mounted() {
this.fetchSubscription();
},
methods: {
async fetchSubscription() {
this.isLoading = true;
const db = getFirestore();
const subsRef = collection(
db,
"Subscribed", firebaseAuth.currentUser.uid, "payments"
);
const subsQuery = query(
subsRef,
where("product", "==", "prod_QIRNX4klvLTfKe" )
);
this.subscription = await getDocs(subsQuery)
.then((sub) =>
sub.docs.length > 0 ? sub.docs[0].data() : null);
this.isLoading = false;
},
},
忽略订阅并不意味着订阅我们正在处理条纹一次性产品,我试图将其 id 关闭我知道订阅产品在顶层有 id,但不幸的是这些是一次性产品,没有。
我还尝试使用来自 firebase 文档的 collectionGroup 查询,如下所示
methods: {
async fetchSubscription() {
this.isLoading = true;
const db = getFirestore();
const subsRef = collection(
db,
"Subscribed", firebaseAuth.currentUser.uid, "payments"
);
const subsQuery = query(collectionGroup(
subsRef, "items", "price" ),
where("product", "==", "prod_QIRNX4klvLTfKe" )
);
this.subscription = await getDocs(subsQuery)
.then((sub) =>
sub.docs.length > 0 ? sub.docs[0].data() : null);
this.isLoading = false;
},
},
是的,我已经导入了collectionGroup,我只是没有在此代码片段中包含我的代码顶部,因为它没有改变。
有谁知道如何使用collectionGroup或其他方式获取产品id?我将非常感谢任何帮助。
据我在屏幕截图中看到的,
items
字段是一个包含复杂对象的类型数组字段。不幸的是,您无法仅根据 items
数组中存在的对象的单个 ID 字段从“付款”集合中获取文档。换句话说,您无法仅根据产品 ID 创建查询。为了能够过滤数据,您应该使用整个对象,而不仅仅是一些部分数据。该对象应包含所有字段的值。
如果您无法使用整个对象来创建过滤,那么您唯一的选择就是创建一个仅包含产品 ID 的数组。最后,您可以使用
array contains
运算符过滤集合中的文档。