Предположим, у меня есть массив объектов, как показано ниже.запрос для извлечения нескольких объектов в массиве в mongodb
"array" : [
{
"id" : 1
},
{
"id" : 2
},
{
"id" : 2
},
{
"id" : 4
}
]
Если я хочу, чтобы получить несколько объектов ({ID: 2}) из этого массива, запрос агрегации выглядит следующим образом.
db.coll.aggregate([{ $match : {"_id" : ObjectId("5492690f72ae469b0e37b61c")}}, { $unwind : "$array"}, { $match : { "array.id" : 2}}, { $group : { _id : "$_id", array : { $push : { id : "$array.id"}}}} ])
Выход выше агрегации
{
"_id" : ObjectId("5492690f72ae469b0e37b61c"),
"array" : [
{
"id" : 2
},
{
"id" : 2
}
]
}
Теперь возникает вопрос: 1) извлечение из нескольких объектов из массива возможно при использовании Find() в MongoDB?
2) Что касается Производительность, является ли агрегация правильным способом? (Потому что нам нужно использовать четыре оператора трубопровода)?
3) Можно ли использовать манипуляцию Java (зацикливание массива и только сохранить {ID: 2} объекты), чтобы сделать это после того, как находки ({ "_ ид": ObjectId ("5492690f72ae469b0e37b61c")}) запроса? Потому что find однажды извлечет документ и сохранит его в ОЗУ. Но если мы используем агрегацию, для получения результата необходимо выполнить в оперативной памяти четыре операции.
Почему я задал вопрос 3): Предположим, что тысячи клиентов, обращающихся в одно и то же время, будут перезагружены оперативной памятью. Если это делается с использованием Java, меньше задач в ОЗУ.
4) Как долго рабочий набор будет в ОЗУ ??
Правильно ли я понимаю?
Пожалуйста, исправьте меня, если я ошибаюсь.
Пожалуйста, предложите мне, чтобы иметь правильное представление по этому вопросу ..
1 Вопрос на вопрос. Вот как это работает. Нет другого способа фильтрации массива с помощью '.find()'. Рамка агрегации является инструментом для этого. Пожалуйста, задавайте другие вопросы как отдельные вопросы. Вопрос 4 принадлежит [dba.stackexchange.com] (http: //dba.stackexchange.com) –
И обратите внимание на точку «3», как будто вы не агрегируете что-либо или не нуждаетесь в этом для какого-либо другого более позднего этапа, тогда вам, вероятно, лучше не фильтровать ваши массивы в клиенте. Все зависит от масштаба. –
Агрегация происходит медленнее, чем find(). Именно по этой причине я задал вопрос 3). Так что будет правильным методом. find() + Java или aggregation()? – manojpt