Node.js 在数组子firestore中搜索
如何检索与以下数据结构中的子级匹配的所有文档:Node.js 在数组子firestore中搜索,node.js,firebase,google-cloud-firestore,Node.js,Firebase,Google Cloud Firestore,如何检索与以下数据结构中的子级匹配的所有文档: { [ id: { name: "name", products: { items: [ productName: "this is the product Name" ] } } ] } 我尝试比较的参数是products.items[0].productName中的参数。 我是这样尝试的,但它
{
[
id: {
name: "name",
products: {
items: [
productName: "this is the product Name"
]
}
}
]
}
我尝试比较的参数是products.items[0].productName中的参数。
我是这样尝试的,但它没有检索到任何内容:
试试看{
var数据=[];
const byName=wait dbRef.where('producto.items[0].producto','=',req.params.nombre).get();
console.log(按名称);
if(byName.empty){
console.log('没有匹配的文档');
res.send('无匹配文件');
返回;
}
byName.forEach(doc=>{
console.log(doc.id'=>',doc.data());
data.push(doc.data());
});
res.send(数据);
}捕捉(错误){
res.send(err);
}
如果要在项目
数组中的所有项目中搜索与您拥有的值匹配的项目,可以使用:
但请注意,这仅在数组仅包含每个项中的producto
字段时有效。原因是数组只包含
(和其他数组级运算符)处理完整项
因此,如果producto.items
中的项有多个子字段,并且您希望在其中一个子字段上进行匹配,则不能使用array contains
。在这种情况下,您可以选择:
- 将项目名称存储在一个单独的/附加的数组字段
,然后使用产品名称
数组包含的内容查询该字段
- 将数组项存储在子集合中并查询该子集合
- 使用映射而不是数组来存储这些值。不过,这将生成许多额外的索引,这不仅会增加存储成本,而且可能会让您达到最佳状态
dbRef.where('producto.items', 'array-contains', { producto: req.params.nombre})