Firestore使用where子句查询嵌套对象内grade字段为指定值的job文档
Firestore多值匹配嵌套字段查询方案
- 嵌套字段的引用直接使用点分隔符拼接字段路径即可,不需要额外的嵌套语法
- 匹配多个可选值优先使用
whereIn算子,效率比多个or条件拼接更高 whereIn最多支持10个匹配值,当前场景仅2个匹配值完全符合使用要求
1. JavaScript/Web SDK 示例
import { collection, query, where, getDocs } from "firebase/firestore"; const jobsRef = collection(db, "job"); // 替换为你的job集合实际名称 const q = query( jobsRef, where("container.grade", "in", ["New", "Near New"]) ); // 执行查询 const querySnapshot = await getDocs(q); querySnapshot.forEach((doc) => { console.log(doc.id, " => ", doc.data()); });
2. Python Admin SDK 示例
import firebase_admin from firebase_admin import firestore db = firestore.client() jobs_ref = db.collection('job') docs = jobs_ref.where('container.grade', 'in', ['New', 'Near New']).stream() for doc in docs: print(f'{doc.id} => {doc.to_dict()}')
3. Java SDK 示例
import com.google.cloud.firestore.Firestore; import com.google.cloud.firestore.QuerySnapshot; import java.util.Arrays; Firestore db = FirestoreOptions.getDefaultInstance().getService(); QuerySnapshot querySnapshot = db.collection("job") .whereIn("container.grade", Arrays.asList("New", "Near New")) .get() .get(); for (var doc : querySnapshot.getDocuments()) { System.out.println(doc.getId() + " => " + doc.getData()); }
如果你使用的是不支持
whereIn的旧版本SDK,可以用or条件组合实现等效逻辑:
// 旧版本兼容写法示例 const q = query( jobsRef, or( where("container.grade", "==", "New"), where("container.grade", "==", "Near New") ) );
内容的提问来源于stack exchange,提问作者Jeewantha
相关产品推荐
相关产品推荐

