我有下面的收藏:
[{
"_id": "60035d0a1599912a5c814e58",
"idUsuario": "600365521599912a5c814e5e",
"parentNode": "",
"piernaPadre": "",
"estado": "1"
},
{
"_id": "6003827b06b4423c9ca7e6aa",
"idUsuario": "60036e53dda7df34749ebf3a",
"parentNode": "60035d0a1599912a5c814e58",
"piernaPadre": "d",
"estado": 1
},
{
"_id": "60038c92ea7d593fe029cc0f",
"idUsuario": "600382a506b4423c9ca7e6ab",
"parentNode": "6003827b06b4423c9ca7e6aa",
"piernaPadre": "d",
"estado": 1
}]
我需要获取一个节点的后代,我尝试使用$graphLookup
,
$graphLookup: {
from: "nodoModel",
startWith: "$_id",
connectFromField: "_id",
connectToField: "parentNode",
as: "arrayDes"
}
但不起作用,退货无效。是否有错误?
- 谢谢-谢谢
编辑1
现在我可以得到一个结果,当试图得到一个节点的祖先:
$graphLookup: {
from: "nodos",
startWith: "$_id",
connectFromField: "_id",
connectToField: "nodoPadre",
as: "padre"
}
白下面的结果:
[
{
_id: 60035d0a1599912a5c814e58,
idUsuario: '600365521599912a5c814e5e',
parentNode: '',
piernaPadre: '',
estado: '1',
padre: [ [Object] ]
},
{
_id: 6004589436a40941f48121f8,
idUsuario: '600365e9ccf1e51b2cab341f',
parentNode: '60035d0a1599912a5c814e58',
piernaPadre: 'd',
estado: 1,
createdAt: 2021-01-17T15:32:36.986Z,
updatedAt: 2021-01-17T15:32:36.986Z,
__v: 0,
padre: [ [Object] ]
},
{
_id: 6004592936a40941f48121fa,
idUsuario: '6004591536a40941f48121f9',
parentNode: '6004589436a40941f48121f8',
piernaPadre: 'd',
estado: 1,
createdAt: 2021-01-17T15:35:05.626Z,
updatedAt: 2021-01-17T15:35:05.626Z,
__v: 0,
padre: [ [Object] ]
}
]
但我需要的是后代而不是祖先
编辑2
(in原始模型的parentNode命名为nodoPadre)
这是我的代码截图:
也就是console.log:
arrayDes是一个空数组,我用的是mongoose,可能和问题有关吧?
编辑3
我正在尝试将nodoPadre的类型更改为objectId
2条答案
按热度按时间x3naxklr1#
尝试查询以获取后代,
$match
放置条件$grouphLookup
和你的一样Playground
对于第二次编辑:
将所有文档中的
nodoPadre
类型更新为对象ID类型,并将架构中的类型更改为type: mongoose.Types.ObjectId
nfeuvbwi2#
我遇到了同样的问题,最后我通过将集合名称改为小写字母来解决它,它应该是基于mongodb的复数。
Mongoose模式:
Nodejs方法:
我的节点响应:
这里是蒙戈平台地链接:https://mongoplayground.net/p/M4pEB34Ozib