質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

0回答

602閲覧

複数のサブコレクションに共通する単一のフィールドの値に合致するドキュメントを取得したい

MajinBoo

総合スコア16

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

Cloud Firestore

Cloud Firestore は、自動スケーリングと高性能を実現し、アプリケーション開発を簡素化するように構築された NoSQLドキュメントデータベースです。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2021/09/12 01:37

前提・実現したいこと

  • ユーザーが記事を投稿できるサービスをNext.jsとFirebase v9で作成しています。
  • 投稿した記事は公開状態と非公開状態に切り替えることができます。
  • Firestoreは以下の構造になっています。
usersCollection └── userDocument ├── uid ├── userName ├── publicArtilcesCollection │ └── articleDocument │ ├── articleId │ └── articleTitle └── draftArticlesCollection └── articleDocument ├── articleId └── articleTitle

記事の編集を行なうページで記事を情報を取得する際、公開状態の記事も非公開状態の記事も問わず編集できるようにしたいと考えているため、publicCollectiondraftCollectionを横断的に検索して、articleIdの値が一致するドキュメントを取得したいです。

また、読み取り時間や金銭的なコストを抑えるため、親コレクションの範囲内で検索するようにしたいです。
例えば、

  • 全ユーザーのpublicとdraftからaritlceIDが一致するドキュメントを取得

ではなく、

  • 単一ユーザーのpublicとdraftからaritlceIDが一致するドキュメントを取得

したいです。

発生している問題・エラーメッセージ

publicまたはdrafどちらか一方のドキュメントのみしか取得できていないです。

該当のソースコード

現状、記事編集ページで下記のコードにより、一方のサブコレクションからのみ、ドキュメントを取得できています。

javascript

1const { user } = useAuth(); 2useEffect(() => { 3 const { articleID } = router.query; 4 const getArticleData = async () => { 5 const currentApp = getApp(); 6 const db = getFirestore(currentApp); 7 const usersCollection = collection(db, "users"); 8 const userDocRef = doc(usersCollection, user.uid); 9 const articleRef = doc( 10 collection(userDocRef, "publicArticles"), 11 articleID 12 ); 13 const articleDoc = await getDoc(articleRef); 14 const articleData = articleDoc.data(); 15 console.log(articleData); 16 }; 17 getArticleData(); 18}, []);

調べたこと

条件を指定してドキュメントを取得する場合whereを使うかと思い、下記ドキュメントを確認しました。
Cloud Firestore で単純なクエリと複合クエリを実行する  |  Firebase Documentation
ドキュメントのコード例を見ると、いずれもコレクションを指定する必要があるように見受けられました。

補足情報(FW/ツールのバージョンなど)

  • Next.js 11.1.2
  • Firebase 9.0.2

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問