I have the following MongoDB-Structure:
{
"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"
}]
}
}
To find a folder i used this Query:
db.users_folders.find({"UserID": 6, "root.folder.0.folder": { $elemMatch: {id: 3}}}, {"root.folder.0.folder.$": 1})
Problem: The parent Array was displayed too (MainFolder). Any solutions, too exclude parent arrays?
If I got your problem correctly one these will help you:
1: using aggregation:
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
Will produce:
{
"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: using findOne() method:
db.users_folders.findOne({"UserID": 6, "root.folder.0.folder": { $elemMatch: {id: 3}}}, {"root.folder.0.folder.$": 1}).root.folder[0].folder
Which produce:
{
"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"
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With