#mongodb #perl #mongodb-query
#mongodb #perl #mongodb-запрос
Вопрос:
У меня есть коллекция с документами с такой структурой:
{
'travellers': [ 'a', 'b', 'c', 'd' ],
...
'authorized-travellers': {
'a' => {
creator => 'admin',
authorized => true,
when => '2016-18-10 22:45:45',
},
'd' => {
creator => 'admin',
authorized => false,
when => '2016-17-10 12:44:00',
},
}
}
и мне нужен запрос, чтобы найти все документы, которые имеют ожидающие авторизации путешественников.
Путешествие (документ) имеет ожидающие авторизации путешественников, если travellers.count меньше ключей «авторизованные путешественники».
В этом примере это путешествие имеет 2 ожидающих авторизации: b и c.
Если это возможно (в perl) или мне нужно выполнить запрос вручную? Как?
Спасибо
Комментарии:
1. Хорошо, можете ли вы сообщить мне, как это сделать?
2. @simbabque: С нетерпением жду, чтобы узнать от вас различия между ними.
3. @ssr1012 Perl — это название языка. perl — это имя компилятора Perl (двоичного файла, который запускает код Perl). PERL не имеет ничего общего с языком Perl. Вы можете прочитать в Википедии , но наиболее важным источником является perlfaq1 , где написано, но никогда не пишется «PERL», потому что perl не является аббревиатурой ..
4. @simbabque: Исправился. Спасибо.
Ответ №1:
Нет простого способа сделать это на стороне сервера. Возможно, вам удастся создать функцию $where .
Если возможно, я бы хотел пересмотреть схему, чтобы сохранить ожидающий подсчет (или логический флаг) в качестве инварианта в самом документе. При обновлении travellers
и authorized-travellers
pending
одновременно обновляйте счетчик / флаг как атомарную операцию. Тогда запрос на ожидающие авторизации был бы тривиальным.
Чтобы обновить существующие документы, чтобы добавить инвариант, вам нужно быть осторожным с данными, если они часто обновляются.
Если изменение схемы невозможно, то перебирать документы на стороне клиента и проверять их по отдельности просто, хотя и неэффективно. Если документов много и в документе много данных, убедитесь, что вы проецируете только те поля, которые вам нужны.
Надеюсь, эти идеи помогут.