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
数组的循环,第二个$reduce迭代trabajadoresFinca
数组的循环,udpTrabajador
从$filter
数组中获取匹配对象detaleinsumos
将在条件匹配时从数组中获取第一个对象$arrayElemAt
将合并初始值或减少并匹配对象$mergeObjects
第二种方法,您可以使用
$unwind
您的条件$match
解构$unwind
数组trabajadoresFinca
解构$unwind
数组udpTrabajador
解构$unwind
数组detaleinsumos
您的条件$match
显示必填字段$project
您的条件$match
迭代$reduce
数组的循环,第二个$reduce迭代trabajadoresFinca
数组的循环,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"
}
}
])