首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$graphLookup返回空隙阵列

$graphLookup返回空隙阵列
EN

Stack Overflow用户
提问于 2021-01-17 01:44:54
回答 2查看 118关注 0票数 1

我有以下收藏:

代码语言:javascript
复制
[{
    "_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

代码语言:javascript
复制
$graphLookup: {
          from: "nodoModel",
          startWith: "$_id",
          connectFromField: "_id",
          connectToField: "parentNode",
          as: "arrayDes"
        }

但不起作用,回报是无效的。有什么错误吗?

谢谢。

编辑1

现在,当尝试获取节点的de祖先时,我可以得到一个结果:

代码语言:javascript
复制
 $graphLookup: {
          from: "nodos",
          startWith: "$_id",
          connectFromField: "_id",
          connectToField: "nodoPadre",
          as: "padre"
        }

结果如下:

代码语言:javascript
复制
[
    {
    _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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-17 18:26:03

尝试查询以获得后代,

  • $match投放条件
  • $grouphLookup和你的一样
代码语言:javascript
复制
  { $match: { nodoPadre: "" } },
  {
    $graphLookup: {
      from: "collection",
      startWith: "$_id",
      connectFromField: "_id",
      connectToField: "nodoPadre",
      as: "arrayDes"
    }
  }

游乐场

你的第二次编辑:

在所有文档中将nodoPadre类型更新为对象id类型,并将模式中的类型更改为type: mongoose.Types.ObjectId

代码语言:javascript
复制
nodoPadre: {
  type: mongoose.Types.ObjectId,
  required: [false, '2'],
  index: true
}
票数 1
EN

Stack Overflow用户

发布于 2022-11-10 11:20:18

我也遇到了同样的问题,最后我解决了这个问题,将集合名转换为小写字母,它应该是基于mongodb的复数。这是我的详细资料

猫鼬模式:

代码语言:javascript
复制
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方法:

代码语言:javascript
复制
    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回复:

代码语言:javascript
复制
[
    {
        "_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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65756533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档