Firestore 其中“数组包含”查询不适用于引用

typescript

1个回答

写回答

sailin4560

2025-08-24 09:25

+ 关注

谷歌
谷歌

Firestore是谷歌云平台提供的一种NoSQL数据库服务,它具有强大的查询功能,可以轻松地存储和检索数据。其中,“数组包含”查询是Firestore的一个重要特性,它允许我们在查询中使用数组来匹配文档字段的值。然而,需要注意的是,这个功能并不适用于引用类型的字段。

什么是数组包含查询

数组包含查询是一种查询技术,可以使用数组来匹配文档字段的值。例如,我们可以使用数组包含查询来查找包含特定元素的文档。这对于处理包含多个值的字段非常有用,比如标签、兴趣爱好等。

数组包含查询的限制

然而,需要注意的是,数组包含查询在处理引用类型的字段时有一些限制。引用类型是指一个文档字段包含对另一个文档的引用。在这种情况下,我们无法直接使用数组包含查询来匹配引用字段的值。

使用引用类型字段的例子

假设我们有一个电影数据库,其中每个电影文档都包含一个名为"actors"的字段,该字段是一个引用类型的数组,包含演员文档的引用。现在,我们想要查找所有包含特定演员的电影

首先,我们需要创建一个包含演员信息的演员集合。每个演员文档都有一个唯一的标识符,我们可以使用该标识符来创建对演员文档的引用。然后,在电影文档中,我们将"actors"字段设置为一个包含演员引用的数组。

下面是一个使用云函数的示例代码,用于创建电影文档并包含演员引用:

Javascript

const functions = require('firebase-functions');

const admin = require('firebase-admin');

admin.initializeApp();

exports.createMovie = functions.https.onRequest((req, res) => {

const movieRef = admin.firestore().collection('movies').doc();

const actorRef1 = admin.firestore().collection('actors').doc('actor1');

const actorRef2 = admin.firestore().collection('actors').doc('actor2');

movieRef.set({

title: 'Movie 1',

actors: [actorRef1, actorRef2]

})

.then(() => {

res.send('Movie created successfully');

})

.catch((error) => {

res.status(500).send(error.message);

});

});

如何查询包含特定演员的电影

现在,我们想要查询包含特定演员的电影。我们可以使用数组包含查询来实现这一目标,但需要注意,我们不能直接在查询中使用引用类型的字段。

为了解决这个问题,我们可以使用引用类型字段的路径来查询包含特定演员引用的电影。下面是一个使用云函数的示例代码,用于查询包含特定演员的电影

Javascript

const functions = require('firebase-functions');

const admin = require('firebase-admin');

admin.initializeApp();

exports.queryMoviesByActor = functions.https.onRequest((req, res) => {

const actorRef = admin.firestore().collection('actors').doc('actor1');

admin.firestore().collection('movies')

.where('actors', 'array-contAIns', actorRef)

.get()

.then((snapshot) => {

const movies = snapshot.docs.map(doc => doc.data());

res.send(movies);

})

.catch((error) => {

res.status(500).send(error.message);

});

});

在上述代码中,我们首先创建一个对特定演员的引用,然后使用where方法来查询包含该引用的电影。最后,我们将查询结果发送给客户端

在使用Firestore的数组包含查询时,我们需要注意它不适用于引用类型的字段。如果我们需要在引用类型字段上进行查询,我们可以使用引用类型字段的路径来实现查询的目的。这将使我们能够轻松地存储和检索数据,并满足我们的需求。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号