我有以下收藏:
[{
"_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
现在,当尝试获取节点的de祖先时,我可以得到一个结果:
$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
(在最初的模型中,parentNode被命名为nodoPadre)
这是我的代码的截图:

这就是console.log:

arrayDes是一个空数组。我用的是猫鼬,也许和问题有关?
编辑3
我正在尝试将nodoPadre类型更改为objectId

发布于 2021-01-17 18:26:03
尝试查询以获得后代,
$match投放条件$grouphLookup和你的一样 { $match: { nodoPadre: "" } },
{
$graphLookup: {
from: "collection",
startWith: "$_id",
connectFromField: "_id",
connectToField: "nodoPadre",
as: "arrayDes"
}
}你的第二次编辑:
在所有文档中将nodoPadre类型更新为对象id类型,并将模式中的类型更改为type: mongoose.Types.ObjectId
nodoPadre: {
type: mongoose.Types.ObjectId,
required: [false, '2'],
index: true
}发布于 2022-11-10 11:20:18
我也遇到了同样的问题,最后我解决了这个问题,将集合名转换为小写字母,它应该是基于mongodb的复数。这是我的详细资料
猫鼬模式:
const fileFolderSchema = new Schema({
name: String,
parentFolder: {type: Mongoose.Types.ObjectId, ref: "FileFolder"},
path: String,
metadata: {
type: metaDataSchema
}
}, { id: false }).set('toJSON', {
virtuals: true
});
export const FileFolder = Mongoose.model('FileFolder', fileFolderSchema);Nodejs方法:
folder_tree_structure: async(ctx:any) => {
try {
let treeStructure = await FileFolder.aggregate([
{
$match: {
parentFolder: {
$exists: true
}
}
},
{
$graphLookup: {
from: 'filefolders', // here your collection name is always small letters and plural
startWith: '$_id',
connectFromField: 'parentFolder',
connectToField: 'parentFolder',
maxDepth: 1,
depthField: 'depth',
as: 'TreeResult'
}
}
]);
console.log('tree structure',treeStructure )
ctx.status = 200;
ctx.body = treeStructure;
} catch (err) {
ctx.status = 400;
ctx.body = 'Not found'
}
} 我的Nodejs回复:
[
{
"_id": "636cd1d2692344da47f3e2f0",
"name": "Folder2",
"path": "files/Folder2",
"metadata": {
"version": 1,
"created_by": "user-1",
"created_on": "2022-11-10T10:26:26.828Z",
"timeout": -1
},
"__v": 0,
"parentFolder": "636cd213692344da47f3e2f5",
"TreeResult": [
{
"_id": "636cd238692344da47f3e301",
"name": "Folder3",
"path": "files/Folder3",
"metadata": {
"version": 1,
"created_by": "user-1",
"created_on": "2022-11-10T10:28:08.655Z",
"timeout": -1
},
"__v": 0,
"parentFolder": "636cd1d2692344da47f3e2f0",
"depth": 0
},
{
"_id": "636d075874867ade3d3c3224",
"name": "images",
"path": "files/images",
"metadata": {
"version": 1,
"created_by": "user-1",
"created_on": "2022-11-10T14:14:48.871Z",
"timeout": -1
},
"__v": 0,
"parentFolder": "636cd1d2692344da47f3e2f0",
"depth": 0
}
]
},
{
"_id": "636cd213692344da47f3e2f5",
"name": "Folder1",
"path": "files/Folder1",
"metadata": {
"version": 1,
"created_by": "user-1",
"created_on": "2022-11-10T10:27:31.600Z",
"timeout": -1
},
"__v": 0,
"parentFolder": "636cd213692344da47f3e2f5",
"TreeResult": [
{
"_id": "636cd213692344da47f3e2f5",
"name": "Folder1",
"path": "files/Folder1",
"metadata": {
"version": 1,
"created_by": "user-1",
"created_on": "2022-11-10T10:27:31.600Z",
"timeout": -1
},
"__v": 0,
"parentFolder": "636cd213692344da47f3e2f5",
"depth": 0
},
{
"_id": "636cd1d2692344da47f3e2f0",
"name": "Folder2",
"path": "files/Folder2",
"metadata": {
"version": 1,
"created_by": "user-1",
"created_on": "2022-11-10T10:26:26.828Z",
"timeout": -1
},
"__v": 0,
"parentFolder": "636cd213692344da47f3e2f5",
"depth": 0
},
{
"_id": "636ce2452e97522606b14b23",
"name": "images",
"path": "files/images",
"metadata": {
"version": 1,
"created_by": "user-1",
"created_on": "2022-11-10T11:36:37.691Z",
"timeout": -1
},
"__v": 0,
"parentFolder": "636cd213692344da47f3e2f5",
"depth": 0
}
]
},
{
"_id": "636cd238692344da47f3e301",
"name": "Folder3",
"path": "files/Folder3",
"metadata": {
"version": 1,
"created_by": "user-1",
"created_on": "2022-11-10T10:28:08.655Z",
"timeout": -1
},
"__v": 0,
"parentFolder": "636cd1d2692344da47f3e2f0",
"TreeResult": []
},
{
"_id": "636ce2452e97522606b14b23",
"name": "images",
"path": "files/images",
"metadata": {
"version": 1,
"created_by": "user-1",
"created_on": "2022-11-10T11:36:37.691Z",
"timeout": -1
},
"__v": 0,
"parentFolder": "636cd213692344da47f3e2f5",
"TreeResult": []
},
{
"_id": "636d075874867ade3d3c3224",
"name": "images",
"path": "files/images",
"metadata": {
"version": 1,
"created_by": "user-1",
"created_on": "2022-11-10T14:14:48.871Z",
"timeout": -1
},
"__v": 0,
"parentFolder": "636cd1d2692344da47f3e2f0",
"TreeResult": []
}
]这里是芒果播放地面链接:https://mongoplayground.net/p/M4pEB34Ozib
https://stackoverflow.com/questions/65756533
复制相似问题