node.js - 通过带有嵌套对象值的 where 子句查找记录
问题描述
我想做一个多重搜索,如果.where
“sku”没有给出任何结果,继续搜索一个值additional_attributes.refKey
关于如何根据嵌套对象值在 Firestore 中查找记录的任何想法,例如:
const ref = db.collection('products')
let snapshot = await ref.where('sku', '==', req.query.id).get()
if (snapshot.empty) {
snapshot = await ref.where('additional_attributes', 'array-contains', req.query.id).get()
if (snapshot.empty) return res.json([])
}
const collection = []
snapshot.forEach(doc => {
collection.push({ id: doc.id, ...doc.data() })
})
res.json(collection)
我也尝试过这种方式:
snapshot = await ref.where('additional_attributes', 'array-contains', { refKey: req.query.id }).get()
但它也没有给我任何结果。知道我做错了什么吗?
解决方案
您需要使用dot notation
来访问嵌套属性:
await ref.where('additional_attributes.refKey', '==', req.query.id)
// ^^^^^^
array-contains
如果您正在查找数组中的元素,则可以使用相同的方法来使用其他运算符。
推荐阅读
- tfs - 如何执行从 TFS 2018 到 Azure DevOps 的代码迁移?
- python - 已解决:使用 Python3 处理 Xml
- python - 为什么回溯打印早于打印网址?
- ios - 使用日期键对字典数组进行排序
- ansible - 如何从其他文件调用 ansible yml 文件?
- mobx - 使 React 展示组件对 MobX 存储更改做出反应的任何方式
- mongodb - 首次启动 MongoDB 时出现问题 (MAC)
- python - python 中的“yield”关键字是如何真正起作用的,尤其是当它带有递归时?
- java - java.io.IOException:服务器返回 HTTP 响应代码:500 for URL:“SoapEndPoint url”
- sql - 如何在这个给定的场景中获取非翻译数据