2017-02-15 13 views
1

У меня есть массив родительских документов, состоящий из вложенных документов в диапазоне от 20 до 500. Как ограничить количество вложенных документов, отображаемых для каждого родительского документа.Как ограничить количество вложенных документов, показанных в MongoDB

Ниже представлена ​​структура документа и вложенного документа.

[{ 
     id 
     title 
     users: [{ 
       user_id: 1, 
       timestamp: 2354218, 
       field3: 4 
      }, { 
       user_id: 1, 
       timestamp: 2354218, 
       field3: 4 
      }, { 
       user_id: 1, 
       timestamp: 2354218, 
       field3: 4 
      }, 
      ... 
     ] 

    }, { 

    }, 
    ... 
] 

Я хочу, чтобы ограничить число пользователей, показанных для каждого родительского документа. как?

Мой запрос

db.movies.aggregate(
[{$match: { 
    "movie_title": "Toy Story (1995)"} 
    },{ 
    $lookup: { 
     from: "users", 
     localField: "users.user_id", 
     foreignField: "users.id", 
     as: "users" 
    } 
}, 
{$project: { 

     movie_title: "$movie_title", 
     users: { $slice: [ "$users", 1 ] } 
    }} 
]); 

ответ

2

Вы можете попробовать ниже запрос. Используйте $slice, чтобы получить не более первых n элементов в массиве вложенных документов для каждого документа.

db.collection.aggregate([{ $project: { title: 1, nUsers: { $slice: [ "$users", n ] } } ]) 

или с использованием регулярного запроса.

db.collection.find({}, { title: 1, nUsers: {$slice: n } }) 
+0

Я показал запрос, который я использую с помощью ломтика $, как вы упомянули. но я не думаю, что это работает –

+0

Надеюсь, вы уже поняли это. – Veeram

+0

Как ограничить количество полей, отображаемых в «users». например, у меня есть пользователи zip_code, профессия, пол, возраст, ... Я хочу показать только zip_code и занятие. –