Arrays MongoDb滤波器阵列

Arrays MongoDb滤波器阵列,arrays,database,mongodb,filter,project,Arrays,Database,Mongodb,Filter,Project,数据结构: [{ "_id": { "$oid": "5f1e91da1d840d673d159e69" }, "product": [ { "_id": "1", "name": "FirstWarehouseName1", "image": "

数据结构:

[{
  "_id": {
    "$oid": "5f1e91da1d840d673d159e69"
  },
  "product": [
    {
      "_id": "1",
      "name": "FirstWarehouseName1",
      "image": "FirstWarehousePhoto1",
      "manufacturer": "FirstWarehouseProducer1",
      "warehouse": "Warehouse1",
      "price": "32",
      "amount": 344
    },
    {
      "_id": "2",
      "name": "FirstWarehouseName2",
      "image": "FirstWarehousePhoto2",
      "manufacturer": "FirstWarehouseProducer2",
      "warehouse": "Warehouse1",
      "price": "12",
      "amount": 631
    },
    {
      "_id": "3",
      "name": "FirstWarehouseName3",
      "image": "FirstWarehousePhoto3",
      "manufacturer": "FirstWarehouseProducer3",
      "warehouse": "Warehouse1",
      "price": "66",
      "amount": 752
    }
  ],
  "_class": "pl.com.ttsw.intership.product_model.Products"
},{
  "_id": {
    "$oid": "5f1e91da1d840d673d159e6a"
  },
  "product": [
    {
      "_id": "1",
      "name": "SecondWarehouseName1",
      "image": "SecondWarehousePhoto1",
      "manufacturer": "SecondWarehouseProducerName1",
      "warehouse": "Warehouse2",
      "price": "32",
      "amount": 344
    },
    {
      "_id": "2",
      "name": "SecondWarehouseName2",
      "image": "SecondWarehousePhoto2",
      "manufacturer": "SecondWarehouseProducerName2",
      "warehouse": "Warehouse2",
      "price": "12",
      "amount": 631
    },
    {
      "_id": "3",
      "name": "SecondWarehouseName3",
      "image": "SecondWarehousePhoto3",
      "manufacturer": "SecondWarehouseProducerName3",
      "warehouse": "Warehouse2",
      "price": "66",
      "amount": 752
    }
  ],
  "_class": "pl.com.ttsw.intership.product_model.Products"
},{
  "_id": {
    "$oid": "5f1e91db1d840d673d159e6b"
  },
  "product": [
    {
      "_id": "1",
      "name": "ThirdWarehouseName1",
      "image": "ThirdWarehousePhoto1",
      "manufacturer": "ThirdWarehouse1",
      "warehouse": "Warehouse3",
      "price": "44",
      "amount": 123
    },
    {
      "_id": "2",
      "name": "ThirdWarehouseName2",
      "image": "ThirdWarehousePhoto2",
      "manufacturer": "ThirdWarehouse2",
      "warehouse": "Warehouse3",
      "price": "11",
      "amount": 442
    },
    {
      "_id": "3",
      "name": "ThirdWarehouseName3",
      "image": "ThirdWarehousePhoto3",
      "manufacturer": "ThirdWarehouse3",
      "warehouse": "Warehouse3",
      "price": "2",
      "amount": 2213
    }
  ],
  "_class": "pl.com.ttsw.intership.product_model.Products"
}]

我也试着这样:

/////////////////////////////////////////////////////////////// 我需要按名称过滤阵列中的阵列(仓库中的产品); 如果我没有项目响应,那么所有产品都是数组。 输出结果(按“名称3”搜索)

我尝试了所有的方法,但我都做不到。 ////////////////////////////////你可以做

[{
    $unwind: {
        path: "$product",
        preserveNullAndEmptyArrays: false
    }
}, {
    $match: {
        "product.name": {
            $regex: "Name3"
        }
    }
}, {
    $group: {
        _id: "$_id",
        product: {
            $push: "$product"
        }
    }
}]

工作

如果只筛选数组中的元素,即使只有一个元素匹配,也会返回整个数组,如果没有匹配,则不会返回任何内容。因此,您需要使用
$unwind
操作符将数组分隔为不同的文档,并且只有在它之后,才尝试使用
$match
过滤结果

以下查询可能会解决您的问题

db.collection.aggregate([
{“$REWIND”:“$product”},
{“$match”:{“product.name”:“FirstWarehouseName1”}}//将此处替换为所需的名称
])
工作


如果可以的话,请告诉我一个提示:您应该将每个产品存储在不同的文档中,尽管MongoDB是无模式的,允许我们拥有几乎任何格式的文档,但请记住,每个文档应该包含相当于常规关系数据库中的一行信息。否则,您将开始出现这些问题,此外还有性能问题。

基本上,“项目”用于为输出选择属性,“过滤器”用于查找正确的文档。您正在某个MongoDB GUI客户端中执行此操作,该客户端受到限制。。。如果你用代码来做,你会有更多的控制权。
[{
    $unwind: {
        path: "$product",
        preserveNullAndEmptyArrays: false
    }
}, {
    $match: {
        "product.name": {
            $regex: "Name3"
        }
    }
}, {
    $group: {
        _id: "$_id",
        product: {
            $push: "$product"
        }
    }
}]