Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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 如何获得一个位于另一个具有nodejs和mongodb的对象中的对象?_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 如何获得一个位于另一个具有nodejs和mongodb的对象中的对象?

Node.js 如何获得一个位于另一个具有nodejs和mongodb的对象中的对象?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我需要通过该对象的\u id获取名为detaleinsumos的数组中包含的信息 我已经尝试了很多方法,但我仍然没有找到解决问题的方法,因为它总是向我显示该文档的所有对象,这对我来说并不适用 这是我需要从中获取信息的文件: { "_id":{"$oid":"5f9041196462be3c5ca1e53d"}, "codigoFinca":"000", "nomb

我需要通过该对象的
\u id
获取名为
detaleinsumos
的数组中包含的信息

我已经尝试了很多方法,但我仍然没有找到解决问题的方法,因为它总是向我显示该文档的所有对象,这对我来说并不适用

这是我需要从中获取信息的文件:

{
    "_id":{"$oid":"5f9041196462be3c5ca1e53d"},
    "codigoFinca":"000",
    "nombreFinca":"PROVINCIANA",
    "fechaRegistro":"2020-10-21",
    "semanaRegistro":"43",
    "usuarioRegistro":"cotorreo",
    "trabajadoresFinca":[
        {
            "porcentajeRecargo":0,
            "_id":{"$oid":"5f9041196462be3c5ca1e53e"},
            "udpTrabajador":[
                {
                    "unidadesAPagar":null,
                    "valorUnidad":"",
                    "areaLaborada":"2",
                    "semanaNormal":null,
                    "semanaAtrazos":null,
                    "_id":{"$oid":"5f9041196462be3c5ca1e53f"},
                    "detalleInsumos":[
                        {"_id":{"$oid":"5f9041196462be3c5ca1e540"},
                         "codigoInsumo":"20000001",
                         "descripcionInsumo":"NYLON X 5 KILOS",
                         "cantidadAplicada":"153",
                         "idRDI":"426715",
                         "idDetalleSaldo":"24070"
                        }
                    ],
                    "codigoLabor":"101",
                    "nombreLabor":"AMARRE",
                    "loteLaboro":"1"
                }
            ],
            "codigoTrabajador":"0000",
            "nombresTrabajador":"HUMBERTO  MENA MOSQUERA",
            "horasJornada":"10",
            "horasLaboradas":"10"
        }
    ],
    "createdAt":{"$date":"2020-10-21T14:09:29.876Z"},
    "updatedAt":{"$date":"2020-10-21T15:09:51.657Z"},
    "__v":0
}
这就是我从nodejs尝试过的:

const consultauno = await Modelo.findOne({
                'trabajadoresFinca.udpTrabajador.detalleInsumos._id': new ObjectId(idInsumo)
            },
            {
                "trabajadoresFinca.udpTrabajador.detalleInsumos": 1
            });
            console.log(consultauno);
你可以试试

  • $match
    您的条件
  • $reduce
    迭代
    trabajadoresFinca
    数组的循环,第二个$reduce迭代
    udpTrabajador
    数组的循环,
    $filter
    detaleinsumos
    数组中获取匹配对象
  • $arrayElemAt
    将在条件匹配时从数组中获取第一个对象
  • $mergeObjects
    将合并初始值或减少并匹配对象


第二种方法,您可以使用
$unwind

  • $match
    您的条件
  • $unwind
    解构
    trabajadoresFinca
    数组
  • $unwind
    解构
    udpTrabajador
    数组
  • $unwind
    解构
    detaleinsumos
    数组
  • $match
    您的条件
  • $project
    显示必填字段
你可以试试

  • $match
    您的条件
  • $reduce
    迭代
    trabajadoresFinca
    数组的循环,第二个$reduce迭代
    udpTrabajador
    数组的循环,
    $filter
    detaleinsumos
    数组中获取匹配对象
  • $arrayElemAt
    将在条件匹配时从数组中获取第一个对象
  • $mergeObjects
    将合并初始值或减少并匹配对象


第二种方法,您可以使用
$unwind

  • $match
    您的条件
  • $unwind
    解构
    trabajadoresFinca
    数组
  • $unwind
    解构
    udpTrabajador
    数组
  • $unwind
    解构
    detaleinsumos
    数组
  • $match
    您的条件
  • $project
    显示必填字段

您好,这是一个嵌套在那里的整个世界:)根据我的经验,您唯一的选择是mongo聚合,即使使用聚合也会很痛苦。您没有编写您的
idisamo
,而且
Modelo
与这些文档中的哪一个相关。如果可能,请分享您的
Modelo
模式和
idisamo
,看看我们能做些什么。GoodluckHello,感谢您的时间,我已经使用aggregate找到了我需要的
Insumo
,但它一直在给我整个对象作为答案,我真正需要的是我正在寻找的
Insumo
及其相应的对象id。在这种情况下,我需要的
Insumo就是id为“5f9041196462be3c5ca1e540”的
。我的问题是。。。如何仅获取一个具有
Insumo
值的对象​​而不是整个对象作为响应?嗨,那是一个嵌套在那里的整个世界:)根据我的经验,你唯一的选择是mongo聚合,即使使用聚合也会很痛苦。您没有编写您的
idisamo
,而且
Modelo
与这些文档中的哪一个相关。如果可能,请分享您的
Modelo
模式和
idisamo
,看看我们能做些什么。GoodluckHello,感谢您的时间,我已经使用aggregate找到了我需要的
Insumo
,但它一直在给我整个对象作为答案,我真正需要的是我正在寻找的
Insumo
及其相应的对象id。在这种情况下,我需要的
Insumo就是id为“5f9041196462be3c5ca1e540”的
。我的问题是。。。如何仅获取一个具有
Insumo
值的对象​​而不是整个物体作为回应?请原谅我的无知但是。。。如何在该结果中获得
trabajadoresFinca
udpTrabajador
\u id
?。我需要他们再次更新该对象。我认为这很难进入我的方法,我添加了第二种方法,您可以检查。非常感谢您的帮助。请原谅我的无知,但。。。如何在该结果中获得
trabajadoresFinca
udpTrabajador
\u id
?。我需要他们再次更新该对象。我认为在我的方法中很难获得,我添加了第二种方法,您可以检查。非常感谢您的帮助。
const consultauno = await Modelo.aggregate([
  {
    $match: {
      "trabajadoresFinca.udpTrabajador.detalleInsumos._id": ObjectId(idInsumo)
    }
  },
  {
    $project: {
      detalleInsumos: {
        $reduce: {
          input: "$trabajadoresFinca",
          initialValue: {},
          in: {
            $mergeObjects: [
              "$$value",
              {
                $reduce: {
                  input: "$$this.udpTrabajador",
                  initialValue: {},
                  in: {
                    $mergeObjects: [
                      "$$value",
                      {
                        $arrayElemAt: [
                          {
                            $filter: {
                              input: "$$this.detalleInsumos",
                              cond: {
                                $eq: ["$$this._id", ObjectId(idInsumo)]
                              }
                            }
                          },
                          0
                        ]
                      }
                    ]
                  }
                }
              }
            ]
          }
        }
      }
    }
  }
])
const consultauno = await Modelo.aggregate([
  {
    $match: {
      "trabajadoresFinca.udpTrabajador.detalleInsumos._id": ObjectId(idInsumo)
    }
  },
  { $unwind: "$trabajadoresFinca" },
  { $unwind: "$trabajadoresFinca.udpTrabajador" },
  { $unwind: "$trabajadoresFinca.udpTrabajador.detalleInsumos" },
  {
    $match: {
      "trabajadoresFinca.udpTrabajador.detalleInsumos._id": ObjectId(idInsumo)
    }
  },
  {
    $project: {
      trabajadoresFinca: "$trabajadoresFinca._id",
      udpTrabajador: "$trabajadoresFinca.udpTrabajador._id",
      detalleInsumos: "$trabajadoresFinca.udpTrabajador.detalleInsumos"
    }
  }
])