[英]How to use '$match' Aggregation Operators of MongoDB to match with the id of embedded document?
[英]Mongodb aggregation with filter embedded document NoseJS
我正在咨詢我的API,我作為參數傳遞一系列電台
http:// localhost:3790 / api / getSensorIdstation / 191,1123
我得到的答案如下:
{
"Station_types":[
{
"_id":"5cc85899a0160f16c50f4199",
"marca":"Hortisis",
"modelo":"Estacion",
"fabricante":"Hortisis",
"id_station":[
"191",
"457",
"459",
"463",
"465",
"426",
"424"
],
"sensor_type":{
"name":"2",
"type":"clima",
"place":"interior",
"img":"assets/img/temp.png",
"name_comun":"Temp. Ambiente",
"medida":"ºC",
"interfaz":"greenhouse"
}
},
{
"_id":"5cc85899a0160f16c50f4199",
"marca":"Hortisis",
"modelo":"Estacion",
"fabricante":"Hortisis",
"id_station":[
"191",
"457",
"459",
"463",
"465",
"426",
"424"
],
"sensor_type":{
"name":"3",
"type":"clima",
"place":"interior",
"img":"assets/img/hum.png",
"name_comun":"Hum. Relativa",
"medida":"%",
"interfaz":""
}
},
{
"_id":"5cebaa26c6b02a54c6a3f782",
"marca":"Sigfox 8DF004 CO2 Sensirion (L1 214)",
"modelo":"Sigfox 8DF004 CO2 Sensirion (L1 214)",
"fabricante":"Sigfox 8DF004 CO2 Sensirion (L1 214)",
"id_station":[
"1123"
],
"sensor_type":{
"name":"3",
"type":"clima",
"place":"interior",
"img":"assets/img/hum.png",
"name_comun":"Hum. Relativa",
"medida":"%",
"interfaz":""
}
},
{
"_id":"5cebaa26c6b02a54c6a3f782",
"marca":"Sigfox 8DF004 CO2 Sensirion (L1 214)",
"modelo":"Sigfox 8DF004 CO2 Sensirion (L1 214)",
"fabricante":"Sigfox 8DF004 CO2 Sensirion (L1 214)",
"id_station":[
"1123"
],
"sensor_type":{
"name":"43",
"type":"clima",
"place":"interior",
"img":"assets/img/humidity.png",
"name_comun":"Def. vapor de presión",
"medida":"kPa",
"interfaz":""
}
}
]
}
我只需要在id_station上查詢的ID在191和1123中出現,而不是其余的。
我正在測試過濾器,但它無法正常工作。
這是我的代碼:
function getSensorIdstation(req, res) {
var array = req.params.id_station;
var arr = array.split(',');
Station_types.aggregate([
{ "$match": { "id_station": { "$in": arr } } },
{ "$unwind": "$sensor_type" },
],
(err, Station_types) => {
if (err) return res.status(500).send({ message: 'Error al realizar la peticion' })
if (!Station_types) return res.status(404).send({ message: 'Error el usuario no existe' })
res.status(200).send({ Station_types })
})
}
結果應該是這樣的:
{
"Station_types":[
{
"_id":"5cc85899a0160f16c50f4199",
"marca":"Hortisis",
"modelo":"Estacion",
"fabricante":"Hortisis",
"id_station":[
"191"
],
"sensor_type":{
"name":"2",
"type":"clima",
"place":"interior",
"img":"assets/img/temp.png",
"name_comun":"Temp. Ambiente",
"medida":"ºC",
"interfaz":"greenhouse"
}
},
{
"_id":"5cc85899a0160f16c50f4199",
"marca":"Hortisis",
"modelo":"Estacion",
"fabricante":"Hortisis",
"id_station":[
"191"
],
"sensor_type":{
"name":"3",
"type":"clima",
"place":"interior",
"img":"assets/img/hum.png",
"name_comun":"Hum. Relativa",
"medida":"%",
"interfaz":""
}
},
{
"_id":"5cebaa26c6b02a54c6a3f782",
"marca":"Sigfox 8DF004 CO2 Sensirion (L1 214)",
"modelo":"Sigfox 8DF004 CO2 Sensirion (L1 214)",
"fabricante":"Sigfox 8DF004 CO2 Sensirion (L1 214)",
"id_station":[
"1123"
],
"sensor_type":{
"name":"3",
"type":"clima",
"place":"interior",
"img":"assets/img/hum.png",
"name_comun":"Hum. Relativa",
"medida":"%",
"interfaz":""
}
},
{
"_id":"5cebaa26c6b02a54c6a3f782",
"marca":"Sigfox 8DF004 CO2 Sensirion (L1 214)",
"modelo":"Sigfox 8DF004 CO2 Sensirion (L1 214)",
"fabricante":"Sigfox 8DF004 CO2 Sensirion (L1 214)",
"id_station":[
"1123"
],
"sensor_type":{
"name":"43",
"type":"clima",
"place":"interior",
"img":"assets/img/humidity.png",
"name_comun":"Def. vapor de presión",
"medida":"kPa",
"interfaz":""
}
}
]
}
編輯
添加過濾器代碼:但它不返回其余字段,只返回id_station
Station_types.aggregate([
{ "$match": { "id_station": { "$in": arr } } },
{ "$unwind": "$sensor_type" },
{
$project: {
sensor_type: {
$filter: {
input: '$id_station',
as: 'shape',
cond: { $in: ['$$shape', arr] }
}
},
_id: 0
}
}
],
最后,我在幾次測試后找到了解決方案,在項目中添加了一個過濾器,並添加了其余的字段。
function getSensorIdstation(req, res) {
var array = req.params.id_station;
console.log(array);
var arr = array.split(',');
console.log(arr);
Station_types.aggregate([
{ "$match": { "id_station": { "$in": arr } } },
{ "$unwind": "$sensor_type" },
{
$project: {
_id: 0,
id_station: {
$filter: {
input: '$id_station',
as: 'shape',
cond: { $in: ['$$shape', arr] }
}
},
marca: "$marca",
modelo: "$modelo",
fabricante: "$fabricante",
sensor_type: {
name: "$sensor_type.name",
type: "$sensor_type.type",
place: "$sensor_type.place",
img: "$sensor_type.img",
name_comun: "$sensor_type.name_comun",
medida: "$sensor_type.medida",
interfaz: "$sensor_type.interfaz"
}
}
}
],
(err, Station_types) => {
if (err) return res.status(500).send({ message: 'Error al realizar la peticion' })
if (!Station_types) return res.status(404).send({ message: 'Error el usuario no existe' })
/*SensorRecuperado.sort(function(a, b) {
return b.name_comun.localeCompare(a.name_comun);
})*/
res.status(200).send({ Station_types })
})
}
希望有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.