MongoDB (Mon goose) Запросы по массиву - PullRequest
0 голосов
/ 11 февраля 2020

Пример документа:

{
    "_id" : ObjectId("5e41b8ecb6d9d829d07d3c5c"),
    "id" : "foo-bar-1",
    "__v" : 0,
    "books" : [ 
        {
            "_id" : ObjectId("5e41c81dbaa2b215082b52a1"),
            "chapters" : [ 
                {
                    "_id" : ObjectId("5e41c81dbaa2b215082b52a2"),
                    "title" : "Foo",
                    "pages" : 20
                },
                {
                    "_id" : ObjectId("5e41c81dbaa2b215082b52a3"),
                    "title" : "Bar",
                    "pages" : 34
                }
            ]
        }
    ],
    "last_updated" : ISODate("2020-02-10T15:10:50.027-05:00")
    }

Привет,

Я хотел бы выполнить запрос MongoDB, где я нахожу books с точно такими же главами. В идеале я хотел бы выполнить что-то вроде этого:

 const chapters = [{title: 'Foo', pages: 20},{title: 'Bar', pages: 34}];
 const book = await Model.findOne({'books.chapters': chapters});

Однако из моего тестирования это работает, только когда массив chapters включает поля _id. В случае, если я хотел бы использовать это, я бы не знал, что такое идентификатор схемы под-документа. Есть ли способ игнорировать их при сравнении массивов и / или есть лучший способ сделать это сравнение.

Спасибо за ваше время.

1 Ответ

0 голосов
/ 11 февраля 2020

чтобы соответствовать идентичным полям массива, массивы должны быть идентичны во всех отношениях ... поля, их порядок и их значения ... title, pages, id объекта и т. Д. c

работа с тогда для текущей схемы вам нужно будет отфильтровать только заголовок (количество страниц тоже?) через этап запроса конвейера агрегации, а затем использовать пересечение для установления sh соответствия ...

в зависимости от того, где вы находятся в стадии разработки - если еще рано, вы можете создать новое поле массива, содержащее только chapterNames, во время процесса ввода данных ... в дополнение к существующим полям массива Chapters ... если этого будет достаточно, не уверен, что счетчик страниц необходим или не

все еще в этом потенциальном новом поле chapterTitles, как массив, чтобы совпадать с главами, должны быть в одинаковом порядке, идентичном написании.

, если вам не требуется, чтобы все главы совпадали - но ищите только отдельные совпадения имен глав - тогда в текущей схеме вы установили бы $ unwind для разделения массива i к отдельным элементам для сопоставления ... это также делается на этапе совокупного конвейера ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...