首页 > 解决方案 > 通过带有嵌套对象值的 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()

但它也没有给我任何结果。知道我做错了什么吗?

标签: node.jsfirebasegoogle-cloud-platformgoogle-cloud-firestorenosql

解决方案


您需要使用dot notation来访问嵌套属性:

await ref.where('additional_attributes.refKey', '==', req.query.id)
//                                     ^^^^^^

array-contains如果您正在查找数组中的元素,则可以使用相同的方法来使用其他运算符。


推荐阅读