Другой способ использования запроса агрегирования применим только для версии MongoDB> 3.4 -
. Благодарим вас за это сообщение .
Примеры документов для выбирается в этом порядке -
var order = [ "David", "Charlie", "Tess" ];
Запрос -
var query = [
{$match: {name: {$in: order}}},
{$addFields: {"__order": {$indexOfArray: [order, "$name" ]}}},
{$sort: {"__order": 1}}
];
var result = db.users.aggregate(query);
Еще одна цитата из сообщения, объясняющая эти операторы агрегирования -
Этап «$ addFields» является новым в версии 3.4 и позволяет вам «создавать» новые поля для существующих документов, не зная всех других существующих полей. Новое выражение «$ indexOfArray» возвращает позицию определенного элемента в заданном массиве.
blockquote>В основном оператор
addToSet
добавляет новое полеorder
в каждый документ, когда он его находит, и это Полеorder
представляет собой первоначальный порядок нашего массива, который мы предоставили. Затем мы просто сортируем документы на основе этого поля.
Вы можете делать некоторые приемы сценария версии:
http://sunsite.ualberta.ca/Documentation/Gnu/binutils-2.9.1/html_node/ld_26.html
Это может потребовать, чтобы Вы записали обертку вокруг своего lib, который вытягивает в libfoo.so.1, который экспортирует некоторые символы явно и маски все другие как локальные. Например:
MYSYMS {глобальный: foo1; foo2; локальный: *;};
и использование это, когда Вы связываете ту обертку как:
gcc - совместно использовал-Wl, - сценарий версии, mysyms.map-o mylib wrapper.o-lfoo-L/path/to/foo.so.1
, Это должно сделать символы libfoo.so.1 локальными для обертки и не доступное основному exe.
Я могу только придумать обходное решение. Который должен был бы статически связать версию "системной библиотеки", которую Вы используете. Для Вашей статической сборки Вы могли заставить его связаться против той же старой версии как сторонняя библиотека. Учитывая, что это не полагается на более новую версию...
, Возможно, также возможно избежать этих проблем с не соединением со сторонней библиотекой обычный путь. Вместо этого Ваша программа могла загрузить его во время выполнения. Возможно, затем это могло быть затенено против остальных. Но я не знаю много об этом.