Java 如何仅从mongoDB数组返回匹配的元素
我一直在寻找这个问题一个星期,我不明白为什么它仍然不工作 我已将此对象保存到我的MongoDB数据库中:Java 如何仅从mongoDB数组返回匹配的元素,java,arrays,mongodb,mongodb-query,Java,Arrays,Mongodb,Mongodb Query,我一直在寻找这个问题一个星期,我不明白为什么它仍然不工作 我已将此对象保存到我的MongoDB数据库中: { produc: [ { cod_prod: "0001", description: "Ordenador", price: 400, current_stock: 3, min_sto
{
produc: [
{
cod_prod: "0001",
description: "Ordenador",
price: 400,
current_stock: 3,
min_stock: 1,
cod_zone: "08850"
},
{
cod_prod: "0002",
description: "Secador",
price: 30,
current_stock: 10,
min_stock: 2,
cod_zone: "08870"
},
{
cod_prod: "0003",
description: "Portatil",
price: 500,
current_stock: 8,
min_stock: 4,
cod_zone: "08860"
},
{
cod_prod: "0004",
description: "Disco Duro",
price: 100,
current_stock: 20,
min_stock: 5,
cod_zone: "08850"
},
{
cod_prod: "0005",
description: "Monitor",
price: 150,
current_stock: 0,
min_stock: 2,
cod_zone: "08850"
}
]
}
例如,我想查询具有特定cod_区域(“08850”)的数组元素
我找到了$elemMatch投影,它应该只返回与查询匹配的数组元素,但我不知道为什么要获取所有对象
这是我正在使用的查询:
db['Collection_Name'].find(
{
produc: {
$elemMatch: {
cod_zone: "08850"
}
}
}
);
这就是我所期望的结果:
{ produc: [
{
cod_prod: "0001",
denominacion: "Ordenador",
precio: 400,
stock_actual: 3,
stock_minimo: 1,
cod_zona: "08850"
},{
cod_prod: "0004",
denominacion: "Disco Duro",
precio: 100,
stock_actual: 20,
stock_minimo: 5,
cod_zona: "08850"
},
{
cod_prod: "0005",
denominacion: "Monitor",
precio: 150,
stock_actual: 0,
stock_minimo: 2,
cod_zona: "08850"
}]
}
我正在使用MongoDB Java连接器制作一个Java程序,所以我确实需要一个Java连接器查询,但我想如果我知道mongo查询,我将能够得到它
非常感谢你 这可以通过实现。管道通过以下操作传递集合中的所有文档: 运算符-通过解构,为
produc
数组字段中的每个元素输出文档
操作员将仅筛选符合cod_zone
条件的文档
操作员将按指定的标识符表达式对输入文档进行分组,并将累加器表达式应用于每个组:
操作员然后重建流中的每个文档:
db.collection.aggregate([
{
"$unwind": "$produc"
},
{
"$match": {
"produc.cod_zone": "08850"
}
},
{
"$group":
{
"_id": null,
"produc": {
"$push": {
"cod_prod": "$produc.cod_prod",
"description": "$produc.description",
"price" : "$produc.price",
"current_stock" : "$produc.current_stock",
"min_stock" : "$produc.min_stock",
"cod_zone" : "$produc.cod_zone"
}
}
}
},
{
"$project": {
"_id": 0,
"produc": 1
}
}
])
将产生:
{
"result" : [
{
"produc" : [
{
"cod_prod" : "0001",
"description" : "Ordenador",
"price" : 400,
"current_stock" : 3,
"min_stock" : 1,
"cod_zone" : "08850"
},
{
"cod_prod" : "0004",
"description" : "Disco Duro",
"price" : 100,
"current_stock" : 20,
"min_stock" : 5,
"cod_zone" : "08850"
},
{
"cod_prod" : "0005",
"description" : "Monitor",
"price" : 150,
"current_stock" : 0,
"min_stock" : 2,
"cod_zone" : "08850"
}
]
}
],
"ok" : 1
}
非常感谢你,克丽达姆!你的回答很有用!