Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在数组子firestore中搜索_Node.js_Firebase_Google Cloud Firestore - Fatal编程技术网

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
。在这种情况下,您可以选择:

  • 将项目名称存储在一个单独的/附加的数组字段
    产品名称
    ,然后使用
    数组包含的内容查询该字段
  • 将数组项存储在子集合中并查询该子集合
  • 使用映射而不是数组来存储这些值。不过,这将生成许多额外的索引,这不仅会增加存储成本,而且可能会让您达到最佳状态

我不知道您的查询试图做什么。它似乎与您提供的文档结构不匹配。在任何情况下,Firestore都不支持在查询中使用数组中的索引。
dbRef.where('producto.items', 'array-contains', { producto: req.params.nombre})