MongoDB - Select 没有父数组的数组

MongoDB - Select an array without parent arrays

我有以下 MongoDB-结构:

{
  "UserID" : 6,
  "_id" : ObjectId("54c4f824e81141175c0f4750"),
  "root" : {
    "files" : [],
    "folder" : [{
        "created" : "23-01-15",
        "files" : [],
        "folder" : [{
            "created" : "22-12-22",
            "folder" : [{
                "created" : "25-01-2015",
                "folder" : [{
                    "id" : 6,
                    "name" : "name!",
                    "created" : "25-01-2015",
                    "files" : []
                  }],
                "id" : 4,
                "name" : "folder2"
              }],
            "id" : 3,
            "name" : "folder1"
          }],
        "id" : 1,
        "name" : "MainFolder"
      }, {
        "id" : 2,
        "name" : "MainFolder2",
        "created" : "23-01-15"
      }]
  }
}

要查找文件夹,我使用了以下查询:

db.users_folders.find({"UserID": 6, "root.folder.0.folder": { $elemMatch: {id: 3}}}, {"root.folder.0.folder.$": 1})

问题:父数组也显示了 (MainFolder)。 任何解决方案,也排除父数组?

如果我正确地解决了你的问题,那么这些将对你有所帮助:

1:使用聚合:

db.users_folders.aggregate([
{ $match : {"UserID": 6, "root.folder.folder": { $elemMatch: {id: 3}}}} ,
{ $unwind : "$root.folder" },
{ $unwind : "$root.folder.folder" },
{ $match : { "root.folder.folder.id": 3}} ,
{ $project : {folder : "$root.folder.folder"} }
]).result

将产生:

{
    "0" : {
        "_id" : ObjectId("54c4f824e81141175c0f4750"),
        "folder" : {
            "created" : "22-12-22",
            "folder" : [ 
                {
                    "created" : "25-01-2015",
                    "folder" : [ 
                        {
                            "id" : 6,
                            "name" : "name!",
                            "created" : "25-01-2015",
                            "files" : []
                        }
                    ],
                    "id" : 4,
                    "name" : "folder2"
                }
            ],
            "id" : 3,
            "name" : "folder1"
        }
    }
}

2:使用 findOne() 方法:

db.users_folders.findOne({"UserID": 6, "root.folder.0.folder": { $elemMatch: {id: 3}}}, {"root.folder.0.folder.$": 1}).root.folder[0].folder

产生:

{
    "0" : {
        "created" : "22-12-22",
        "folder" : [ 
            {
                "created" : "25-01-2015",
                "folder" : [ 
                    {
                        "id" : 6,
                        "name" : "name!",
                        "created" : "25-01-2015",
                        "files" : []
                    }
                ],
                "id" : 4,
                "name" : "folder2"
            }
        ],
        "id" : 3,
        "name" : "folder1"
    }
}