Дублирование ответов MongoDB при совпадении нескольких условий

#mongodb #mongodb-query

#mongodb #mongodb-запрос

Вопрос:

Я использую MongoDB, и у меня есть следующая коллекция:

 >>> db.inventory.insertMany( [
   { item: "journal", instock: [ { warehouse: "A", qty: 5 }, { warehouse: "C", qty: 15 } ] },
   { item: "notebook", instock: [ { warehouse: "C", qty: 5 } ] }
]);
{
    "acknowledged" : true,
    "insertedIds" : [ 
        ObjectId("5ff767c63484d0e87c8fdb6c"), 
        ObjectId("5ff767c63484d0e87c8fdb6d")
    ]
}
 

Я знаю, что могу запросить вложенные объекты в instock массиве и получить соответствующие документы. Например.:

 >>> db.inventory.find( { 'instock.qty': { $lte: 10 } } );
{
    "_id" : ObjectId("5ff767c63484d0e87c8fdb6c"),
    "item" : "journal",
    "instock" : [ { "warehouse" : "A", "qty" : 5.0 }, { "warehouse" : "C", "qty" : 15.0 } ]
}
{
    "_id" : ObjectId("5ff767c63484d0e87c8fdb6d"),
    "item" : "notebook",
    "instock" : [ { "warehouse" : "C", "qty" : 5.0 } ]
}
 

Но теперь я хотел бы дублировать возвращенные документы, если find условие соответствует документу несколько раз. Что-то вроде:

 >>> db.inventory.find( { 'instock.qty': { $lte: 20 } } );
{
    "_id" : ObjectId("5ff767c63484d0e87c8fdb6c"),
    "item" : "journal",
    "instock" : [ { "warehouse" : "A", "qty" : 5.0 }, { "warehouse" : "C", "qty" : 15.0 } ]
}
{
    "_id" : ObjectId("5ff767c63484d0e87c8fdb6c"),
    "item" : "journal",
    "instock" : [ { "warehouse" : "A", "qty" : 5.0 }, { "warehouse" : "C", "qty" : 15.0 } ]
}
{
    "_id" : ObjectId("5ff767c63484d0e87c8fdb6d"),
    "item" : "notebook",
    "instock" : [ { "warehouse" : "C", "qty" : 5.0 } ]
}
 

В этом примере первый документ возвращается дважды, потому { 'instock.qty': { $lte: 20 } } что условие совпадает с документом дважды (для { "warehouse" : "A", "qty" : 5.0 } и также { "warehouse" : "C", "qty" : 15.0 } )

Есть ли способ добиться такого поведения с MongoDB?

Спасибо.

Комментарии:

1. Зачем использовать сетевой трафик и использовать базу данных вместо дублирования документов на стороне клиента? У вас есть все данные, необходимые для этого

2. @SergeyBerezovskiy Для того, чтобы использовать функцию разбиения Mongo на страницы (пропустить, ограничить) для дублированных результатов.

3. Решает ли этот подход для вас? mongoplayground.net/p/btUCYw6F5ap

4. Или, может быть, вам нужно это: mongoplayground.net/p/EO4bsxfXmbu