Если вы не хотите использовать aggregate
, другое решение - использовать find
, а затем сортировать результаты на стороне клиента с помощью array#sort
:
Если значения $in
являются примитивными типами, такими как числа, вы можете использовать такой подход, как:
var ids = [4, 2, 8, 1, 9, 3, 5, 6];
MyModel.find({ _id: { $in: ids } }).exec(function(err, docs) {
docs.sort(function(a, b) {
// Sort docs by the order of their _id values in ids.
return ids.indexOf(a._id) - ids.indexOf(b._id);
});
});
Если значения $in
являются непримитивными типами, например ObjectId
s, требуется другой подход поскольку indexOf
сравнивается по ссылке в этом случае.
Если вы используете Node.js 4.x +, вы можете использовать Array#findIndex
и ObjectID#equals
, чтобы отрегулировать это, изменив функцию sort
на:
docs.sort((a, b) => ids.findIndex(id => a._id.equals(id)) -
ids.findIndex(id => b._id.equals(id)));
Или с любой версией Node.js, с подчеркиванием / lodash's findIndex
:
docs.sort(function (a, b) {
return _.findIndex(ids, function (id) { return a._id.equals(id); }) -
_.findIndex(ids, function (id) { return b._id.equals(id); });
});
Если Вы действительно только хотите имя каталога, используйте макрос строковой константы P_tmpdir
, определенный в <stdio.h>
.
"tempnam () функция возвращает указатель на строку, которая является допустимым именем файла, и таким образом, что файл с этим именем не существовал, когда tempnam () проверил".
предупреждение возникает из-за состояния состязания между проверкой и более поздним созданием файла.
Вы хотите только получить имя каталога? Для чего это должно быть хорошо?
Как незнакомец уже сказал, можно отключить это (и подобные предупреждения) использующий-Wno-deprecated-declarations.
Можно использовать GCC's -Wno-deprecated-declarations
опция отключить все предупреждения как это. Я предлагаю, чтобы Вы обработали предупреждение правильно, тем не менее, и взяли предложение компилятора.