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"
}
}
我有以下 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"
}
}